clawcrib 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/bin/clawcrib.mjs +149 -0
- package/dist/.next/BUILD_ID +1 -0
- package/dist/.next/app-path-routes-manifest.json +28 -0
- package/dist/.next/build-manifest.json +21 -0
- package/dist/.next/package.json +1 -0
- package/dist/.next/prerender-manifest.json +354 -0
- package/dist/.next/required-server-files.json +331 -0
- package/dist/.next/routes-manifest.json +244 -0
- package/dist/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/_global-error/page/build-manifest.json +18 -0
- package/dist/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/dist/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/_global-error/page.js +10 -0
- package/dist/.next/server/app/_global-error/page.js.map +5 -0
- package/dist/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/dist/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/_global-error.html +2 -0
- package/dist/.next/server/app/_global-error.meta +15 -0
- package/dist/.next/server/app/_global-error.rsc +12 -0
- package/dist/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/dist/.next/server/app/_global-error.segments/_full.segment.rsc +12 -0
- package/dist/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/dist/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
- package/dist/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/dist/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/_not-found/page/build-manifest.json +18 -0
- package/dist/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/_not-found/page.js +16 -0
- package/dist/.next/server/app/_not-found/page.js.map +5 -0
- package/dist/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/_not-found.html +7 -0
- package/dist/.next/server/app/_not-found.meta +16 -0
- package/dist/.next/server/app/_not-found.rsc +25 -0
- package/dist/.next/server/app/_not-found.segments/_full.segment.rsc +25 -0
- package/dist/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/_not-found.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -0
- package/dist/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
- package/dist/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -0
- package/dist/.next/server/app/agent/[name]/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/agent/[name]/page/build-manifest.json +18 -0
- package/dist/.next/server/app/agent/[name]/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/agent/[name]/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/agent/[name]/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/agent/[name]/page.js +18 -0
- package/dist/.next/server/app/agent/[name]/page.js.map +5 -0
- package/dist/.next/server/app/agent/[name]/page.js.nft.json +1 -0
- package/dist/.next/server/app/agent/[name]/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/chat/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/chat/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/chat/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/chat/route.js +7 -0
- package/dist/.next/server/app/api/chat/route.js.map +5 -0
- package/dist/.next/server/app/api/chat/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/chat/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/crib/profiles/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/crib/profiles/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/crib/profiles/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/crib/profiles/route.js +7 -0
- package/dist/.next/server/app/api/crib/profiles/route.js.map +5 -0
- package/dist/.next/server/app/api/crib/profiles/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/crib/profiles/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/crib/stream/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/crib/stream/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/crib/stream/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/crib/stream/route.js +7 -0
- package/dist/.next/server/app/api/crib/stream/route.js.map +5 -0
- package/dist/.next/server/app/api/crib/stream/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/crib/stream/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/seed-learn/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/seed-learn/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/seed-learn/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/seed-learn/route.js +9 -0
- package/dist/.next/server/app/api/seed-learn/route.js.map +5 -0
- package/dist/.next/server/app/api/seed-learn/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/seed-learn/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route.js +8 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route.js.map +5 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/v1/agents/[handle]/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/v1/agents/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/v1/agents/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/v1/agents/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/v1/agents/route.js +8 -0
- package/dist/.next/server/app/api/v1/agents/route.js.map +5 -0
- package/dist/.next/server/app/api/v1/agents/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/v1/agents/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route.js +8 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route.js.map +5 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/v1/cribs/[slug]/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/v1/cribs/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/v1/cribs/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/v1/cribs/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/v1/cribs/route.js +8 -0
- package/dist/.next/server/app/api/v1/cribs/route.js.map +5 -0
- package/dist/.next/server/app/api/v1/cribs/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/v1/cribs/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/v1/heartbeat/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/v1/heartbeat/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/v1/heartbeat/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/v1/heartbeat/route.js +8 -0
- package/dist/.next/server/app/api/v1/heartbeat/route.js.map +5 -0
- package/dist/.next/server/app/api/v1/heartbeat/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/v1/heartbeat/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/api/v1/stats/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/api/v1/stats/route/build-manifest.json +11 -0
- package/dist/.next/server/app/api/v1/stats/route/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/api/v1/stats/route.js +8 -0
- package/dist/.next/server/app/api/v1/stats/route.js.map +5 -0
- package/dist/.next/server/app/api/v1/stats/route.js.nft.json +1 -0
- package/dist/.next/server/app/api/v1/stats/route_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/browse/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/browse/page/build-manifest.json +18 -0
- package/dist/.next/server/app/browse/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/browse/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/browse/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/browse/page.js +18 -0
- package/dist/.next/server/app/browse/page.js.map +5 -0
- package/dist/.next/server/app/browse/page.js.nft.json +1 -0
- package/dist/.next/server/app/browse/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/browse.html +7 -0
- package/dist/.next/server/app/browse.meta +15 -0
- package/dist/.next/server/app/browse.rsc +26 -0
- package/dist/.next/server/app/browse.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/browse.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/browse.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/browse.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/browse.segments/browse/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/browse.segments/browse.segment.rsc +4 -0
- package/dist/.next/server/app/builder/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/builder/page/build-manifest.json +18 -0
- package/dist/.next/server/app/builder/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/builder/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/builder/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/builder/page.js +19 -0
- package/dist/.next/server/app/builder/page.js.map +5 -0
- package/dist/.next/server/app/builder/page.js.nft.json +1 -0
- package/dist/.next/server/app/builder/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/builder.html +7 -0
- package/dist/.next/server/app/builder.meta +15 -0
- package/dist/.next/server/app/builder.rsc +28 -0
- package/dist/.next/server/app/builder.segments/_full.segment.rsc +28 -0
- package/dist/.next/server/app/builder.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/builder.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/builder.segments/_tree.segment.rsc +6 -0
- package/dist/.next/server/app/builder.segments/builder/__PAGE__.segment.rsc +10 -0
- package/dist/.next/server/app/builder.segments/builder.segment.rsc +4 -0
- package/dist/.next/server/app/crib/[slug]/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/crib/[slug]/page/build-manifest.json +18 -0
- package/dist/.next/server/app/crib/[slug]/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/crib/[slug]/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/crib/[slug]/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/crib/[slug]/page.js +19 -0
- package/dist/.next/server/app/crib/[slug]/page.js.map +5 -0
- package/dist/.next/server/app/crib/[slug]/page.js.nft.json +1 -0
- package/dist/.next/server/app/crib/[slug]/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/crib/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/crib/page/build-manifest.json +18 -0
- package/dist/.next/server/app/crib/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/crib/page/react-loadable-manifest.json +17 -0
- package/dist/.next/server/app/crib/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/crib/page.js +18 -0
- package/dist/.next/server/app/crib/page.js.map +5 -0
- package/dist/.next/server/app/crib/page.js.nft.json +1 -0
- package/dist/.next/server/app/crib/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/crib.html +1 -0
- package/dist/.next/server/app/crib.meta +15 -0
- package/dist/.next/server/app/crib.rsc +26 -0
- package/dist/.next/server/app/crib.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/crib.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/crib.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/crib.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/crib.segments/crib/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/crib.segments/crib.segment.rsc +4 -0
- package/dist/.next/server/app/demo/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/demo/page/build-manifest.json +18 -0
- package/dist/.next/server/app/demo/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/demo/page/react-loadable-manifest.json +17 -0
- package/dist/.next/server/app/demo/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/demo/page.js +18 -0
- package/dist/.next/server/app/demo/page.js.map +5 -0
- package/dist/.next/server/app/demo/page.js.nft.json +1 -0
- package/dist/.next/server/app/demo/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/demo.html +1 -0
- package/dist/.next/server/app/demo.meta +15 -0
- package/dist/.next/server/app/demo.rsc +26 -0
- package/dist/.next/server/app/demo.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/demo.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/demo.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/demo.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/demo.segments/demo/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/demo.segments/demo.segment.rsc +4 -0
- package/dist/.next/server/app/feedback/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/feedback/page/build-manifest.json +18 -0
- package/dist/.next/server/app/feedback/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/feedback/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/feedback/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/feedback/page.js +18 -0
- package/dist/.next/server/app/feedback/page.js.map +5 -0
- package/dist/.next/server/app/feedback/page.js.nft.json +1 -0
- package/dist/.next/server/app/feedback/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/feedback.html +7 -0
- package/dist/.next/server/app/feedback.meta +15 -0
- package/dist/.next/server/app/feedback.rsc +26 -0
- package/dist/.next/server/app/feedback.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/feedback.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/feedback.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/feedback.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/feedback.segments/feedback.segment.rsc +4 -0
- package/dist/.next/server/app/gltest/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/gltest/page/build-manifest.json +18 -0
- package/dist/.next/server/app/gltest/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/gltest/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/gltest/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/gltest/page.js +18 -0
- package/dist/.next/server/app/gltest/page.js.map +5 -0
- package/dist/.next/server/app/gltest/page.js.nft.json +1 -0
- package/dist/.next/server/app/gltest/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/gltest.html +1 -0
- package/dist/.next/server/app/gltest.meta +16 -0
- package/dist/.next/server/app/gltest.rsc +26 -0
- package/dist/.next/server/app/gltest.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/gltest.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/gltest.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/gltest.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/gltest.segments/gltest/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/gltest.segments/gltest.segment.rsc +4 -0
- package/dist/.next/server/app/help/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/help/page/build-manifest.json +18 -0
- package/dist/.next/server/app/help/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/help/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/help/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/help/page.js +19 -0
- package/dist/.next/server/app/help/page.js.map +5 -0
- package/dist/.next/server/app/help/page.js.nft.json +1 -0
- package/dist/.next/server/app/help/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/help.html +7 -0
- package/dist/.next/server/app/help.meta +15 -0
- package/dist/.next/server/app/help.rsc +26 -0
- package/dist/.next/server/app/help.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/help.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/help.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/help.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/help.segments/help/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/help.segments/help.segment.rsc +4 -0
- package/dist/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/icon.svg/route/build-manifest.json +11 -0
- package/dist/.next/server/app/icon.svg/route.js +7 -0
- package/dist/.next/server/app/icon.svg/route.js.map +5 -0
- package/dist/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/dist/.next/server/app/icon.svg.body +69 -0
- package/dist/.next/server/app/icon.svg.meta +1 -0
- package/dist/.next/server/app/index.html +1 -0
- package/dist/.next/server/app/index.meta +14 -0
- package/dist/.next/server/app/index.rsc +26 -0
- package/dist/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
- package/dist/.next/server/app/index.segments/_full.segment.rsc +26 -0
- package/dist/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/index.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/index.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/learn/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/learn/page/build-manifest.json +18 -0
- package/dist/.next/server/app/learn/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/learn/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/learn/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/learn/page.js +18 -0
- package/dist/.next/server/app/learn/page.js.map +5 -0
- package/dist/.next/server/app/learn/page.js.nft.json +1 -0
- package/dist/.next/server/app/learn/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/learn.html +7 -0
- package/dist/.next/server/app/learn.meta +15 -0
- package/dist/.next/server/app/learn.rsc +24 -0
- package/dist/.next/server/app/learn.segments/_full.segment.rsc +24 -0
- package/dist/.next/server/app/learn.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/learn.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/learn.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/learn.segments/learn/__PAGE__.segment.rsc +6 -0
- package/dist/.next/server/app/learn.segments/learn.segment.rsc +4 -0
- package/dist/.next/server/app/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/page/build-manifest.json +18 -0
- package/dist/.next/server/app/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/page.js +18 -0
- package/dist/.next/server/app/page.js.map +5 -0
- package/dist/.next/server/app/page.js.nft.json +1 -0
- package/dist/.next/server/app/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/privacy/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/privacy/page/build-manifest.json +18 -0
- package/dist/.next/server/app/privacy/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/privacy/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/privacy/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/privacy/page.js +18 -0
- package/dist/.next/server/app/privacy/page.js.map +5 -0
- package/dist/.next/server/app/privacy/page.js.nft.json +1 -0
- package/dist/.next/server/app/privacy/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/privacy.html +7 -0
- package/dist/.next/server/app/privacy.meta +15 -0
- package/dist/.next/server/app/privacy.rsc +49 -0
- package/dist/.next/server/app/privacy.segments/_full.segment.rsc +49 -0
- package/dist/.next/server/app/privacy.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/privacy.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/privacy.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/privacy.segments/privacy/__PAGE__.segment.rsc +26 -0
- package/dist/.next/server/app/privacy.segments/privacy.segment.rsc +4 -0
- package/dist/.next/server/app/terms/page/app-paths-manifest.json +3 -0
- package/dist/.next/server/app/terms/page/build-manifest.json +18 -0
- package/dist/.next/server/app/terms/page/next-font-manifest.json +11 -0
- package/dist/.next/server/app/terms/page/react-loadable-manifest.json +1 -0
- package/dist/.next/server/app/terms/page/server-reference-manifest.json +4 -0
- package/dist/.next/server/app/terms/page.js +18 -0
- package/dist/.next/server/app/terms/page.js.map +5 -0
- package/dist/.next/server/app/terms/page.js.nft.json +1 -0
- package/dist/.next/server/app/terms/page_client-reference-manifest.js +2 -0
- package/dist/.next/server/app/terms.html +7 -0
- package/dist/.next/server/app/terms.meta +15 -0
- package/dist/.next/server/app/terms.rsc +46 -0
- package/dist/.next/server/app/terms.segments/_full.segment.rsc +46 -0
- package/dist/.next/server/app/terms.segments/_head.segment.rsc +6 -0
- package/dist/.next/server/app/terms.segments/_index.segment.rsc +11 -0
- package/dist/.next/server/app/terms.segments/_tree.segment.rsc +5 -0
- package/dist/.next/server/app/terms.segments/terms/__PAGE__.segment.rsc +22 -0
- package/dist/.next/server/app/terms.segments/terms.segment.rsc +4 -0
- package/dist/.next/server/app-paths-manifest.json +28 -0
- package/dist/.next/server/chunks/[externals]__26f7eb63._.js +3 -0
- package/dist/.next/server/chunks/[externals]__94ec4388._.js +3 -0
- package/dist/.next/server/chunks/[externals]_next_dist_5e1fe3b2._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0b3464ad._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__44bc039f._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__63d66305._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__664944da._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__8f5ebbc3._.js +7 -0
- package/dist/.next/server/chunks/[root-of-the-server]__b922dae0._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__c60a61a1._.js +8 -0
- package/dist/.next/server/chunks/[root-of-the-server]__e4ef116e._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__ec9868a8._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__ecc70079._.js +3 -0
- package/dist/.next/server/chunks/[turbopack]_runtime.js +795 -0
- package/dist/.next/server/chunks/_a7270702._.js +5 -0
- package/dist/.next/server/chunks/_bf13447d._.js +5 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_chat_route_actions_ac0c75e3.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_crib_profiles_route_actions_308de254.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_crib_stream_route_actions_bbf9b7bc.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_seed-learn_route_actions_0699fef4.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_v1_agents_[handle]_route_actions_0c549019.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_v1_agents_route_actions_721a8d91.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_v1_cribs_[slug]_route_actions_7da88aef.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_v1_cribs_route_actions_3e0e4f62.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_v1_heartbeat_route_actions_68e6be72.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_api_v1_stats_route_actions_6eecb829.js +3 -0
- package/dist/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_d76bbd00.js +3 -0
- package/dist/.next/server/chunks/node_modules_next_1402a1da._.js +17 -0
- package/dist/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1cb6f5ec.js +138 -0
- package/dist/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b0bc0442.js +4 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0d14f48b._.js +11 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__1eed2761._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__2734027d._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__2e88568e._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__303358d0._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__30f2aed4._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__4158500d._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__5d87b943._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__6c6c4815._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__72d10e7e._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__76b71b25._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__7bce49e2._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__83594e65._.js +5 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__89e1cc69._.js +11 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__89f9832c._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__9e78ee63._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__a83a39ca._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__b704ba4a._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__c5a73a50._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__cb11b5eb._.js +4 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__ccfb3607._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__d62d6ecd._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__e43a75f6._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__e79298db._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__fc6e09e6._.js +51 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__feca0381._.js +3 -0
- package/dist/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
- package/dist/.next/server/chunks/ssr/_1436224b._.js +3 -0
- package/dist/.next/server/chunks/ssr/_1fad76ec._.js +4 -0
- package/dist/.next/server/chunks/ssr/_22adca49._.js +4 -0
- package/dist/.next/server/chunks/ssr/_305fab72._.js +3 -0
- package/dist/.next/server/chunks/ssr/_326fa6da._.js +4 -0
- package/dist/.next/server/chunks/ssr/_32e7f94c._.js +4 -0
- package/dist/.next/server/chunks/ssr/_3449c279._.js +9 -0
- package/dist/.next/server/chunks/ssr/_50a446b6._.js +4 -0
- package/dist/.next/server/chunks/ssr/_537b36f0._.js +3 -0
- package/dist/.next/server/chunks/ssr/_5a1c26a3._.js +3 -0
- package/dist/.next/server/chunks/ssr/_5b825777._.js +3 -0
- package/dist/.next/server/chunks/ssr/_6034e2f0._.js +3 -0
- package/dist/.next/server/chunks/ssr/_6e1cb0fc._.js +4 -0
- package/dist/.next/server/chunks/ssr/_7db9aade._.js +4 -0
- package/dist/.next/server/chunks/ssr/_84cdd45e._.js +4 -0
- package/dist/.next/server/chunks/ssr/_8d6b2d48._.js +3 -0
- package/dist/.next/server/chunks/ssr/_8e49afb6._.js +11 -0
- package/dist/.next/server/chunks/ssr/_978d53ef._.js +3 -0
- package/dist/.next/server/chunks/ssr/_a46dee72._.js +3 -0
- package/dist/.next/server/chunks/ssr/_a4ec9584._.js +3 -0
- package/dist/.next/server/chunks/ssr/_a523705e._.js +3 -0
- package/dist/.next/server/chunks/ssr/_a8f5ed56._.js +473 -0
- package/dist/.next/server/chunks/ssr/_af002283._.js +4 -0
- package/dist/.next/server/chunks/ssr/_b0f0f24f._.js +3 -0
- package/dist/.next/server/chunks/ssr/_b1786cf5._.js +4 -0
- package/dist/.next/server/chunks/ssr/_bce53e9d._.js +3 -0
- package/dist/.next/server/chunks/ssr/_bdd93ed8._.js +4 -0
- package/dist/.next/server/chunks/ssr/_be519242._.js +3 -0
- package/dist/.next/server/chunks/ssr/_bff3a5c8._.js +4 -0
- package/dist/.next/server/chunks/ssr/_cfc98e1a._.js +3 -0
- package/dist/.next/server/chunks/ssr/_dc6d9d10._.js +4 -0
- package/dist/.next/server/chunks/ssr/_e01a61c0._.js +3 -0
- package/dist/.next/server/chunks/ssr/_e078e27a._.js +3 -0
- package/dist/.next/server/chunks/ssr/_e23aa0ff._.js +4 -0
- package/dist/.next/server/chunks/ssr/_ea501b94._.js +4 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_75761787.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_554ec2bf.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_agent_[name]_page_actions_6440b611.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_browse_page_actions_8ceec5b3.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_builder_page_actions_e20876c5.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_crib_[slug]_page_actions_7c32236c.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_crib_page_actions_378e2f5e.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_demo_page_actions_0903ddc0.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_feedback_page_actions_ad090f73.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_gltest_page_actions_349b4191.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_help_page_actions_0e668f4d.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_learn_page_actions_365b1268.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_page_actions_39d4fc33.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_privacy_page_actions_78bfea85.js +3 -0
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_terms_page_actions_3b82705a.js +3 -0
- package/dist/.next/server/chunks/ssr/convex__generated_api_883e6779.js +4 -0
- package/dist/.next/server/chunks/ssr/node_modules_04a97984._.js +395 -0
- package/dist/.next/server/chunks/ssr/node_modules_3cf9a583._.js +11 -0
- package/dist/.next/server/chunks/ssr/node_modules_@convex-dev_auth_dist_react_index_c572ed70.js +4 -0
- package/dist/.next/server/chunks/ssr/node_modules_a18674a0._.js +395 -0
- package/dist/.next/server/chunks/ssr/node_modules_d6c03641._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_framer-motion_dist_es_render_components_motion_proxy_mjs_b72b0714._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_920e7746._.js +6 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js +4 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_174ae28d._.js +10 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_61a87db9._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_65e60196._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_6e285db9._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_2fffaa3a._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_15817684.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_92969d11.js +4 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_esm_eedfc1fd._.js +6 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_f9713a08._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_app_0db9afea._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_app_builder_layout_tsx_1bea4aaa._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_app_crib_[slug]_error_tsx_50c1779a._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_app_error_tsx_ef715cc8._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_app_feedback_page_tsx_d44f95de._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_app_gltest_page_tsx_8e1c7fda._.js +183 -0
- package/dist/.next/server/chunks/ssr/src_app_help_layout_tsx_4a130e98._.js +3 -0
- package/dist/.next/server/chunks/ssr/src_components_ConvexClientProvider_tsx_df965ff3._.js +4 -0
- package/dist/.next/server/chunks/ssr/src_lib_63f56dbd._.js +7 -0
- package/dist/.next/server/chunks/ssr/src_lib_data_ts_10e26668._.js +714 -0
- package/dist/.next/server/chunks/ssr/src_lib_e61a13e2._.js +7 -0
- package/dist/.next/server/chunks/ssr/src_lib_org-templates_ts_5900b973._.js +3 -0
- package/dist/.next/server/edge/chunks/[root-of-the-server]__25fe7590._.js +15 -0
- package/dist/.next/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_78fa9d6a.js +3 -0
- package/dist/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_99e3e1b8.js +6 -0
- package/dist/.next/server/functions-config-manifest.json +7 -0
- package/dist/.next/server/middleware-build-manifest.js +22 -0
- package/dist/.next/server/middleware-manifest.json +33 -0
- package/dist/.next/server/next-font-manifest.js +1 -0
- package/dist/.next/server/next-font-manifest.json +63 -0
- package/dist/.next/server/pages/404.html +7 -0
- package/dist/.next/server/pages/500.html +2 -0
- package/dist/.next/server/pages-manifest.json +4 -0
- package/dist/.next/server/server-reference-manifest.js +1 -0
- package/dist/.next/server/server-reference-manifest.json +5 -0
- package/dist/.next/static/LDs2QlURjFsxe6doQgQaH/_buildManifest.js +11 -0
- package/dist/.next/static/LDs2QlURjFsxe6doQgQaH/_clientMiddlewareManifest.json +6 -0
- package/dist/.next/static/LDs2QlURjFsxe6doQgQaH/_ssgManifest.js +1 -0
- package/dist/.next/static/chunks/045c83caa4d15373.js +1 -0
- package/dist/.next/static/chunks/04696d7c5884aa95.js +5 -0
- package/dist/.next/static/chunks/0841814a9bcfce10.js +1 -0
- package/dist/.next/static/chunks/0bd6498bda341889.js +1 -0
- package/dist/.next/static/chunks/108e0ffb63379a48.js +1 -0
- package/dist/.next/static/chunks/11ce1c153def8992.js +1 -0
- package/dist/.next/static/chunks/123ff9bd00156eb9.css +1 -0
- package/dist/.next/static/chunks/169b21b9dab86074.js +1 -0
- package/dist/.next/static/chunks/251e16428085edaf.js +1 -0
- package/dist/.next/static/chunks/33483ea0d00e5c1c.js +393 -0
- package/dist/.next/static/chunks/3cb5ccf4d1eaa633.js +7 -0
- package/dist/.next/static/chunks/46b6f1723e3c2623.js +1 -0
- package/dist/.next/static/chunks/4fa33c2b3825a6a7.js +38 -0
- package/dist/.next/static/chunks/52242a935b4dd54c.js +1 -0
- package/dist/.next/static/chunks/52d3163ddaacab21.js +3 -0
- package/dist/.next/static/chunks/5e108d2a5086dd3c.js +1 -0
- package/dist/.next/static/chunks/619d93506b5beb32.js +2 -0
- package/dist/.next/static/chunks/69a6c697ffcdb2dc.js +1 -0
- package/dist/.next/static/chunks/6b3aa1f3b4ac9239.js +1 -0
- package/dist/.next/static/chunks/792fa1e02f287bb2.js +38 -0
- package/dist/.next/static/chunks/8023316021b59dc8.js +2 -0
- package/dist/.next/static/chunks/82abf2d65f5428ae.js +4 -0
- package/dist/.next/static/chunks/87c6fa7148018b34.css +2 -0
- package/dist/.next/static/chunks/8a5bd6fe3abc8091.css +1 -0
- package/dist/.next/static/chunks/8ba9a4146e696c8b.js +1 -0
- package/dist/.next/static/chunks/909f8c33ddb338d5.js +5 -0
- package/dist/.next/static/chunks/94371ab8e9f84fa1.js +181 -0
- package/dist/.next/static/chunks/a5babc3f7ef11b25.js +9 -0
- package/dist/.next/static/chunks/a6dad97d9634a72d.js +1 -0
- package/dist/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- package/dist/.next/static/chunks/a9b5a3c7d494490d.js +393 -0
- package/dist/.next/static/chunks/ab7596543940b500.js +2 -0
- package/dist/.next/static/chunks/c4fa140911cde35c.js +1 -0
- package/dist/.next/static/chunks/d4bd47435d743ec6.js +13 -0
- package/dist/.next/static/chunks/d91ff7ede64e0c7f.js +434 -0
- package/dist/.next/static/chunks/da5ac7a908f78d62.js +1 -0
- package/dist/.next/static/chunks/e140284ead06b77a.js +712 -0
- package/dist/.next/static/chunks/e3207aa0613573c2.js +9 -0
- package/dist/.next/static/chunks/eb5f77ae3460c46e.js +1 -0
- package/dist/.next/static/chunks/edfa7bbc21dc3450.js +1 -0
- package/dist/.next/static/chunks/f188e57e58a39d0f.js +1 -0
- package/dist/.next/static/chunks/f4e68e70f75d360a.js +1707 -0
- package/dist/.next/static/chunks/fcf47bfad683b072.js +9 -0
- package/dist/.next/static/chunks/fd7c6cd7808e9045.js +49 -0
- package/dist/.next/static/chunks/ff1a16fafef87110.js +1 -0
- package/dist/.next/static/chunks/turbopack-aadb2fcebd6885bc.js +4 -0
- package/dist/.next/static/media/04c5164763c40239-s.690580e8.woff2 +0 -0
- package/dist/.next/static/media/051742360c26797e-s.p.102b7f24.woff2 +0 -0
- package/dist/.next/static/media/1bffadaabf893a1e-s.7cd81963.woff2 +0 -0
- package/dist/.next/static/media/26f284dcc38c84c0-s.303a03d6.woff2 +0 -0
- package/dist/.next/static/media/2bbe8d2671613f1f-s.76dcb0b2.woff2 +0 -0
- package/dist/.next/static/media/2c55a0e60120577a-s.2a48534a.woff2 +0 -0
- package/dist/.next/static/media/5476f68d60460930-s.c995e352.woff2 +0 -0
- package/dist/.next/static/media/6a5386fd6038edbe-s.719084df.woff2 +0 -0
- package/dist/.next/static/media/7e7f32a39836f228-s.0b4edfe7.woff2 +0 -0
- package/dist/.next/static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2 +0 -0
- package/dist/.next/static/media/9c72aa0f40e4eef8-s.18a48cbc.woff2 +0 -0
- package/dist/.next/static/media/ad66f9afd8947f86-s.7a40eb73.woff2 +0 -0
- package/dist/.next/static/media/fa39153a3fc630ba-s.bff0868b.woff2 +0 -0
- package/dist/.next/static/media/icon.b0846afb.svg +69 -0
- package/dist/node_modules/@img/colour/color.cjs +1594 -0
- package/dist/node_modules/@img/colour/index.cjs +1 -0
- package/dist/node_modules/@img/colour/package.json +45 -0
- package/dist/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/dist/node_modules/@img/sharp-darwin-arm64/package.json +40 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/README.md +46 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h +220 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/lib/index.js +1 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib +0 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/package.json +36 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/versions.json +30 -0
- package/dist/node_modules/@next/env/dist/index.js +1 -0
- package/dist/node_modules/@next/env/package.json +36 -0
- package/dist/node_modules/@swc/helpers/cjs/_interop_require_default.cjs +6 -0
- package/dist/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs +38 -0
- package/dist/node_modules/@swc/helpers/package.json +471 -0
- package/dist/node_modules/client-only/index.js +0 -0
- package/dist/node_modules/client-only/package.json +19 -0
- package/dist/node_modules/convex/dist/esm/browser/http_client.js +463 -0
- package/dist/node_modules/convex/dist/esm/browser/index-node.js +5 -0
- package/dist/node_modules/convex/dist/esm/browser/index.js +5 -0
- package/dist/node_modules/convex/dist/esm/browser/logging.js +122 -0
- package/dist/node_modules/convex/dist/esm/browser/query_options.js +5 -0
- package/dist/node_modules/convex/dist/esm/browser/simple_client-node.js +3867 -0
- package/dist/node_modules/convex/dist/esm/browser/simple_client.js +403 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/authentication_manager.js +322 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/client.js +739 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/function_result.js +2 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/local_state.js +296 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/metrics.js +31 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/optimistic_updates.js +2 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/optimistic_updates_impl.js +167 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/paginated_query_client.js +365 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/pagination.js +14 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/protocol.js +72 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/remote_query_set.js +78 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/request_manager.js +209 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/session.js +11 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/udf_path_utils.js +38 -0
- package/dist/node_modules/convex/dist/esm/browser/sync/web_socket_manager.js +651 -0
- package/dist/node_modules/detect-libc/lib/detect-libc.js +313 -0
- package/dist/node_modules/detect-libc/lib/elf.js +39 -0
- package/dist/node_modules/detect-libc/lib/filesystem.js +51 -0
- package/dist/node_modules/detect-libc/lib/process.js +24 -0
- package/dist/node_modules/detect-libc/package.json +44 -0
- package/dist/node_modules/next/dist/build/adapter/build-complete.js +993 -0
- package/dist/node_modules/next/dist/build/after-production-compile.js +95 -0
- package/dist/node_modules/next/dist/build/analysis/extract-const-value.js +205 -0
- package/dist/node_modules/next/dist/build/analysis/get-page-static-info.js +601 -0
- package/dist/node_modules/next/dist/build/analysis/parse-module.js +20 -0
- package/dist/node_modules/next/dist/build/analyze/index.js +242 -0
- package/dist/node_modules/next/dist/build/babel/loader/get-config.js +429 -0
- package/dist/node_modules/next/dist/build/babel/loader/index.js +56 -0
- package/dist/node_modules/next/dist/build/babel/loader/transform.js +103 -0
- package/dist/node_modules/next/dist/build/babel/loader/util.js +20 -0
- package/dist/node_modules/next/dist/build/babel/plugins/commonjs.js +42 -0
- package/dist/node_modules/next/dist/build/babel/plugins/jsx-pragma.js +74 -0
- package/dist/node_modules/next/dist/build/babel/plugins/next-font-unsupported.js +36 -0
- package/dist/node_modules/next/dist/build/babel/plugins/next-page-config.js +104 -0
- package/dist/node_modules/next/dist/build/babel/plugins/next-page-disallow-re-export-all-exports.js +29 -0
- package/dist/node_modules/next/dist/build/babel/plugins/next-ssg-transform.js +345 -0
- package/dist/node_modules/next/dist/build/babel/plugins/optimize-hook-destructuring.js +60 -0
- package/dist/node_modules/next/dist/build/babel/plugins/react-loadable-plugin.js +145 -0
- package/dist/node_modules/next/dist/build/babel/preset.js +250 -0
- package/dist/node_modules/next/dist/build/build-context.js +58 -0
- package/dist/node_modules/next/dist/build/collect-build-traces.js +536 -0
- package/dist/node_modules/next/dist/build/compiler.js +88 -0
- package/dist/node_modules/next/dist/build/create-compiler-aliases.js +436 -0
- package/dist/node_modules/next/dist/build/define-env.js +237 -0
- package/dist/node_modules/next/dist/build/duration-to-string.js +99 -0
- package/dist/node_modules/next/dist/build/entries.js +798 -0
- package/dist/node_modules/next/dist/build/generate-build-id.js +31 -0
- package/dist/node_modules/next/dist/build/generate-routes-manifest.js +91 -0
- package/dist/node_modules/next/dist/build/get-babel-config-file.js +35 -0
- package/dist/node_modules/next/dist/build/get-babel-loader-config.js +109 -0
- package/dist/node_modules/next/dist/build/get-static-info-including-layouts.js +81 -0
- package/dist/node_modules/next/dist/build/handle-entrypoints.js +176 -0
- package/dist/node_modules/next/dist/build/handle-externals.js +290 -0
- package/dist/node_modules/next/dist/build/index.js +2683 -0
- package/dist/node_modules/next/dist/build/is-writeable.js +26 -0
- package/dist/node_modules/next/dist/build/jest/__mocks__/empty.js +10 -0
- package/dist/node_modules/next/dist/build/jest/__mocks__/fileMock.js +15 -0
- package/dist/node_modules/next/dist/build/jest/__mocks__/nextFontMock.js +20 -0
- package/dist/node_modules/next/dist/build/jest/__mocks__/styleMock.js +10 -0
- package/dist/node_modules/next/dist/build/jest/jest.js +227 -0
- package/dist/node_modules/next/dist/build/jest/object-proxy.js +50 -0
- package/dist/node_modules/next/dist/build/load-entrypoint.js +30 -0
- package/dist/node_modules/next/dist/build/load-jsconfig.js +162 -0
- package/dist/node_modules/next/dist/build/lockfile.js +160 -0
- package/dist/node_modules/next/dist/build/manifests/formatter/format-manifest.js +19 -0
- package/dist/node_modules/next/dist/build/next-config-ts/require-hook.js +85 -0
- package/dist/node_modules/next/dist/build/next-config-ts/transpile-config.js +172 -0
- package/dist/node_modules/next/dist/build/next-dir-paths.js +37 -0
- package/dist/node_modules/next/dist/build/normalize-catchall-routes.js +76 -0
- package/dist/node_modules/next/dist/build/output/format.js +84 -0
- package/dist/node_modules/next/dist/build/output/index.js +186 -0
- package/dist/node_modules/next/dist/build/output/log.js +135 -0
- package/dist/node_modules/next/dist/build/output/store.js +204 -0
- package/dist/node_modules/next/dist/build/page-extensions-type.js +6 -0
- package/dist/node_modules/next/dist/build/polyfills/fetch/index.js +6 -0
- package/dist/node_modules/next/dist/build/polyfills/fetch/whatwg-fetch.js +7 -0
- package/dist/node_modules/next/dist/build/polyfills/object-assign.js +6 -0
- package/dist/node_modules/next/dist/build/polyfills/object.assign/auto.js +4 -0
- package/dist/node_modules/next/dist/build/polyfills/object.assign/implementation.js +4 -0
- package/dist/node_modules/next/dist/build/polyfills/object.assign/index.js +19 -0
- package/dist/node_modules/next/dist/build/polyfills/object.assign/polyfill.js +6 -0
- package/dist/node_modules/next/dist/build/polyfills/object.assign/shim.js +6 -0
- package/dist/node_modules/next/dist/build/polyfills/polyfill-module.js +1 -0
- package/dist/node_modules/next/dist/build/polyfills/polyfill-nomodule.js +1 -0
- package/dist/node_modules/next/dist/build/polyfills/process.js +5 -0
- package/dist/node_modules/next/dist/build/preview-key-utils.js +91 -0
- package/dist/node_modules/next/dist/build/progress.js +151 -0
- package/dist/node_modules/next/dist/build/rendering-mode.js +26 -0
- package/dist/node_modules/next/dist/build/segment-config/app/app-segment-config.js +145 -0
- package/dist/node_modules/next/dist/build/segment-config/app/app-segments.js +137 -0
- package/dist/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js +52 -0
- package/dist/node_modules/next/dist/build/segment-config/middleware/middleware-config.js +121 -0
- package/dist/node_modules/next/dist/build/segment-config/pages/pages-segment-config.js +62 -0
- package/dist/node_modules/next/dist/build/sort-by-page-exts.js +30 -0
- package/dist/node_modules/next/dist/build/spinner.js +138 -0
- package/dist/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js +137 -0
- package/dist/node_modules/next/dist/build/static-paths/app.js +682 -0
- package/dist/node_modules/next/dist/build/static-paths/pages.js +169 -0
- package/dist/node_modules/next/dist/build/static-paths/types.js +6 -0
- package/dist/node_modules/next/dist/build/static-paths/utils.js +119 -0
- package/dist/node_modules/next/dist/build/swc/helpers.js +15 -0
- package/dist/node_modules/next/dist/build/swc/index.js +1271 -0
- package/dist/node_modules/next/dist/build/swc/install-bindings.js +30 -0
- package/dist/node_modules/next/dist/build/swc/jest-transformer.js +75 -0
- package/dist/node_modules/next/dist/build/swc/options.js +386 -0
- package/dist/node_modules/next/dist/build/swc/types.js +6 -0
- package/dist/node_modules/next/dist/build/templates/app-page.js +1073 -0
- package/dist/node_modules/next/dist/build/templates/app-route.js +420 -0
- package/dist/node_modules/next/dist/build/templates/edge-app-route.js +85 -0
- package/dist/node_modules/next/dist/build/templates/edge-ssr-app.js +311 -0
- package/dist/node_modules/next/dist/build/templates/edge-ssr.js +335 -0
- package/dist/node_modules/next/dist/build/templates/edge-wrapper.js +24 -0
- package/dist/node_modules/next/dist/build/templates/helpers.js +36 -0
- package/dist/node_modules/next/dist/build/templates/middleware.js +115 -0
- package/dist/node_modules/next/dist/build/templates/pages-api.js +194 -0
- package/dist/node_modules/next/dist/build/templates/pages-edge-api.js +39 -0
- package/dist/node_modules/next/dist/build/templates/pages.js +155 -0
- package/dist/node_modules/next/dist/build/turbopack-analyze/index.js +116 -0
- package/dist/node_modules/next/dist/build/turbopack-build/impl.js +244 -0
- package/dist/node_modules/next/dist/build/turbopack-build/index.js +85 -0
- package/dist/node_modules/next/dist/build/turborepo-access-trace/env.js +29 -0
- package/dist/node_modules/next/dist/build/turborepo-access-trace/helpers.js +104 -0
- package/dist/node_modules/next/dist/build/turborepo-access-trace/index.js +30 -0
- package/dist/node_modules/next/dist/build/turborepo-access-trace/result.js +51 -0
- package/dist/node_modules/next/dist/build/turborepo-access-trace/tcp.js +41 -0
- package/dist/node_modules/next/dist/build/turborepo-access-trace/types.js +8 -0
- package/dist/node_modules/next/dist/build/type-check.js +151 -0
- package/dist/node_modules/next/dist/build/utils.js +1261 -0
- package/dist/node_modules/next/dist/build/validate-app-paths.js +242 -0
- package/dist/node_modules/next/dist/build/webpack/alias/react-dom-server-experimental.js +32 -0
- package/dist/node_modules/next/dist/build/webpack/alias/react-dom-server.js +32 -0
- package/dist/node_modules/next/dist/build/webpack/cache-invalidation.js +91 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/base.js +82 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/index.js +562 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/client.js +49 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/file-resolve.js +21 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/getCssModuleLocalIdent.js +37 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/global.js +65 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/index.js +22 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/modules.js +86 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/loaders/next-font.js +62 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/messages.js +45 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/css/plugins.js +190 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/images/index.js +42 -0
- package/dist/node_modules/next/dist/build/webpack/config/blocks/images/messages.js +16 -0
- package/dist/node_modules/next/dist/build/webpack/config/helpers.js +78 -0
- package/dist/node_modules/next/dist/build/webpack/config/index.js +46 -0
- package/dist/node_modules/next/dist/build/webpack/config/utils.js +13 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/CssSyntaxError.js +32 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/camelcase.js +93 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js +287 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/index.js +36 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-icss-parser.js +105 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-import-parser.js +220 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-url-parser.js +307 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js +83 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/getUrl.js +23 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/css-loader/src/utils.js +459 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/devtool/devtool-style-inject.js +129 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/empty-loader.js +14 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/error-loader.js +36 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/get-module-build-info.js +15 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/codegen.js +156 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/index.js +27 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/interface.js +17 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +429 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/minify.js +94 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/utils.js +58 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/metadata/discover.js +122 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js +171 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/metadata/types.js +7 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/modularize-import-loader.js +39 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-app-loader/create-app-route-code.js +65 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js +765 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-barrel-loader.js +268 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js +37 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-edge-app-route-loader/index.js +51 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-edge-function-loader.js +52 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js +93 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-error-browser-binary-loader.js +21 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js +32 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js +45 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js +49 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-css-loader.js +56 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/action-client-wrapper.js +33 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/action-validate.js +27 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/cache-wrapper.js +13 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js +211 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js +14 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/server-reference.js +13 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-loader/track-dynamic-import.js +13 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-flight-server-reference-proxy-loader.js +29 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-font-loader/index.js +133 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-font-loader/postcss-next-font.js +169 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-image-loader/blur.js +73 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-image-loader/index.js +80 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-invalid-import-error-loader.js +28 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-metadata-image-loader.js +158 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js +342 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-middleware-asset-loader.js +46 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js +59 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-middleware-wasm-loader.js +46 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-root-params-loader.js +164 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js +141 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-style-loader/index.js +220 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-style-loader/runtime/injectStylesIntoLinkTag.js +61 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-style-loader/runtime/injectStylesIntoStyleTag.js +221 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-style-loader/runtime/isEqualLocals.js +27 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js +241 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/Error.js +40 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/Warning.js +35 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js +125 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/utils.js +86 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/index.js +101 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/file-protocol.js +78 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/join-function.js +190 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/postcss.js +92 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/value-processor.js +97 -0
- package/dist/node_modules/next/dist/build/webpack/loaders/utils.js +100 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin-utils.js +79 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin.js +183 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/copy-file-plugin.js +67 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/css-chunking-plugin.js +277 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/css-minimizer-plugin.js +92 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/devtools-ignore-list-plugin.js +78 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/eval-source-map-dev-tool-plugin.js +191 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/flight-client-entry-plugin.js +793 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.js +420 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/force-complete-runtime.js +42 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/jsconfig-paths-plugin.js +219 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/memory-with-gc-cache-plugin.js +114 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/middleware-plugin.js +614 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/mini-css-extract-plugin.js +24 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/minify-webpack-plugin/src/index.js +188 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.js +120 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/next-trace-entrypoints-plugin.js +542 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/next-types-plugin/index.js +428 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/next-types-plugin/shared.js +14 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/nextjs-require-cache-hot-reloader.js +57 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/optional-peer-dependency-resolve-plugin.js +45 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.js +146 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/profiling-plugin.js +282 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/react-loadable-plugin.js +169 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/rspack-flight-client-entry-plugin.js +97 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/rspack-profiling-plugin.js +62 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/slow-module-detection-plugin.js +190 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.js +62 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.js +188 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/update-telemetry-loader-context-from-swc.js +28 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.js +43 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/getModuleTrace.js +89 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/index.js +43 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parse-dynamic-code-evaluation-error.js +19 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseBabel.js +29 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseCss.js +29 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextAppLoaderError.js +26 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextFontError.js +33 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextInvalidImportError.js +26 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNotFoundError.js +166 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseScss.js +42 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/simpleWebpackError.js +18 -0
- package/dist/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/webpackModuleError.js +138 -0
- package/dist/node_modules/next/dist/build/webpack/stringify-request.js +15 -0
- package/dist/node_modules/next/dist/build/webpack/utils.js +109 -0
- package/dist/node_modules/next/dist/build/webpack-build/impl.js +381 -0
- package/dist/node_modules/next/dist/build/webpack-build/index.js +179 -0
- package/dist/node_modules/next/dist/build/webpack-config-rules/resolve.js +55 -0
- package/dist/node_modules/next/dist/build/webpack-config.js +2343 -0
- package/dist/node_modules/next/dist/build/worker.js +35 -0
- package/dist/node_modules/next/dist/build/write-build-id.js +19 -0
- package/dist/node_modules/next/dist/cli/next-test.js +169 -0
- package/dist/node_modules/next/dist/client/add-base-path.js +24 -0
- package/dist/node_modules/next/dist/client/app-build-id.js +49 -0
- package/dist/node_modules/next/dist/client/app-call-server.js +34 -0
- package/dist/node_modules/next/dist/client/app-find-source-map-url.js +38 -0
- package/dist/node_modules/next/dist/client/assign-location.js +29 -0
- package/dist/node_modules/next/dist/client/components/app-router-announcer.js +78 -0
- package/dist/node_modules/next/dist/client/components/app-router-headers.js +128 -0
- package/dist/node_modules/next/dist/client/components/app-router-instance.js +319 -0
- package/dist/node_modules/next/dist/client/components/app-router-utils.js +62 -0
- package/dist/node_modules/next/dist/client/components/app-router.js +495 -0
- package/dist/node_modules/next/dist/client/components/builtin/default.js +35 -0
- package/dist/node_modules/next/dist/client/components/builtin/global-error.js +82 -0
- package/dist/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js +52 -0
- package/dist/node_modules/next/dist/client/components/error-boundary.js +134 -0
- package/dist/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js +86 -0
- package/dist/node_modules/next/dist/client/components/errors/root-error-boundary.js +41 -0
- package/dist/node_modules/next/dist/client/components/forbidden.js +48 -0
- package/dist/node_modules/next/dist/client/components/handle-isr-error.js +31 -0
- package/dist/node_modules/next/dist/client/components/hooks-server-context.js +42 -0
- package/dist/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js +125 -0
- package/dist/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js +72 -0
- package/dist/node_modules/next/dist/client/components/is-next-router-error.js +23 -0
- package/dist/node_modules/next/dist/client/components/links.js +292 -0
- package/dist/node_modules/next/dist/client/components/match-segments.js +32 -0
- package/dist/node_modules/next/dist/client/components/nav-failure-handler.js +61 -0
- package/dist/node_modules/next/dist/client/components/navigation-devtools.js +126 -0
- package/dist/node_modules/next/dist/client/components/navigation-untracked.js +65 -0
- package/dist/node_modules/next/dist/client/components/navigation.js +198 -0
- package/dist/node_modules/next/dist/client/components/navigation.react-server.js +72 -0
- package/dist/node_modules/next/dist/client/components/not-found.js +42 -0
- package/dist/node_modules/next/dist/client/components/readonly-url-search-params.js +41 -0
- package/dist/node_modules/next/dist/client/components/redirect-boundary.js +107 -0
- package/dist/node_modules/next/dist/client/components/redirect-error.js +52 -0
- package/dist/node_modules/next/dist/client/components/redirect-status-code.js +24 -0
- package/dist/node_modules/next/dist/client/components/redirect.js +91 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +128 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js +21 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +59 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js +32 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +340 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/handle-mutable.js +66 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +51 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +1129 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +64 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js +38 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +23 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +168 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +68 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +78 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +292 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +56 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js +61 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/router-reducer.js +66 -0
- package/dist/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js +60 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/cache-key.js +28 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/cache-map.js +305 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/cache.js +1432 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/lru.js +145 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/navigation.js +459 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/prefetch.js +31 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/scheduler.js +1150 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/types.js +69 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/vary-path.js +216 -0
- package/dist/node_modules/next/dist/client/components/static-generation-bailout.js +42 -0
- package/dist/node_modules/next/dist/client/components/unauthorized.js +49 -0
- package/dist/node_modules/next/dist/client/components/unrecognized-action-error.js +39 -0
- package/dist/node_modules/next/dist/client/components/unresolved-thenable.js +23 -0
- package/dist/node_modules/next/dist/client/components/unstable-rethrow.browser.js +28 -0
- package/dist/node_modules/next/dist/client/components/unstable-rethrow.js +25 -0
- package/dist/node_modules/next/dist/client/components/unstable-rethrow.server.js +32 -0
- package/dist/node_modules/next/dist/client/components/use-action-queue.js +102 -0
- package/dist/node_modules/next/dist/client/dev/debug-channel.js +72 -0
- package/dist/node_modules/next/dist/client/flight-data-helpers.js +219 -0
- package/dist/node_modules/next/dist/client/has-base-path.js +23 -0
- package/dist/node_modules/next/dist/client/lib/console.js +177 -0
- package/dist/node_modules/next/dist/client/normalize-trailing-slash.js +36 -0
- package/dist/node_modules/next/dist/client/remove-base-path.js +32 -0
- package/dist/node_modules/next/dist/client/route-params.js +230 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js +339 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js +46 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js +5 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js +18713 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js +44 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js +1 -0
- package/dist/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js +1 -0
- package/dist/node_modules/next/dist/compiled/@hapi/accept/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/@hapi/accept/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/@napi-rs/triples/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/@napi-rs/triples/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/@opentelemetry/api/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/@opentelemetry/api/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/async-retry/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/async-retry/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/async-sema/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/async-sema/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/babel/code-frame.js +1 -0
- package/dist/node_modules/next/dist/compiled/babel/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/babel-code-frame/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/babel-code-frame/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/busboy/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/busboy/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/bytes/index.js +8 -0
- package/dist/node_modules/next/dist/compiled/bytes/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/ci-info/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/ci-info/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/commander/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/commander/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/comment-json/index.js +7 -0
- package/dist/node_modules/next/dist/compiled/comment-json/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/compression/index.js +58 -0
- package/dist/node_modules/next/dist/compiled/compression/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/conf/index.js +15 -0
- package/dist/node_modules/next/dist/compiled/conf/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/content-disposition/index.js +6 -0
- package/dist/node_modules/next/dist/compiled/content-disposition/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/cookie/index.js +7 -0
- package/dist/node_modules/next/dist/compiled/cookie/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/cross-spawn/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/cross-spawn/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/debug/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/debug/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/edge-runtime/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/edge-runtime/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/find-up/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/find-up/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/fresh/index.js +8 -0
- package/dist/node_modules/next/dist/compiled/fresh/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/http-proxy/index.js +34 -0
- package/dist/node_modules/next/dist/compiled/http-proxy/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/image-detector/detector.js +1 -0
- package/dist/node_modules/next/dist/compiled/image-size/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/image-size/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js +1 -0
- package/dist/node_modules/next/dist/compiled/ipaddr.js/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/is-animated/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/is-animated/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/is-docker/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/is-docker/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/is-wsl/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/is-wsl/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/jsonwebtoken/index.js +11 -0
- package/dist/node_modules/next/dist/compiled/jsonwebtoken/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/nanoid/index.cjs +1 -0
- package/dist/node_modules/next/dist/compiled/nanoid/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +24 -0
- package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +24 -0
- package/dist/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +6 -0
- package/dist/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +20 -0
- package/dist/node_modules/next/dist/compiled/p-limit/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/p-limit/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/p-queue/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/p-queue/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/path-browserify/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/path-browserify/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/path-to-regexp/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/path-to-regexp/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/picomatch/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/picomatch/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js +133 -0
- package/dist/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js +130 -0
- package/dist/node_modules/next/dist/compiled/react-is/index.js +7 -0
- package/dist/node_modules/next/dist/compiled/react-is/package.json +26 -0
- package/dist/node_modules/next/dist/compiled/regenerator-runtime/package.json +19 -0
- package/dist/node_modules/next/dist/compiled/regenerator-runtime/runtime.js +729 -0
- package/dist/node_modules/next/dist/compiled/semver/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/semver/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/send/index.js +70 -0
- package/dist/node_modules/next/dist/compiled/send/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/source-map/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/source-map/source-map.js +1 -0
- package/dist/node_modules/next/dist/compiled/stacktrace-parser/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js +1 -0
- package/dist/node_modules/next/dist/compiled/string-hash/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/string-hash/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/strip-ansi/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/strip-ansi/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/superstruct/index.cjs +1 -0
- package/dist/node_modules/next/dist/compiled/superstruct/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/tar/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/tar/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/text-table/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/text-table/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/watchpack/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/watchpack/watchpack.js +1 -0
- package/dist/node_modules/next/dist/compiled/ws/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/ws/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/zod/index.cjs +1 -0
- package/dist/node_modules/next/dist/compiled/zod/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/zod-validation-error/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/zod-validation-error/package.json +1 -0
- package/dist/node_modules/next/dist/experimental/testmode/context.js +57 -0
- package/dist/node_modules/next/dist/experimental/testmode/fetch.js +142 -0
- package/dist/node_modules/next/dist/experimental/testmode/httpget.js +26 -0
- package/dist/node_modules/next/dist/experimental/testmode/server-edge.js +32 -0
- package/dist/node_modules/next/dist/experimental/testmode/server.js +62 -0
- package/dist/node_modules/next/dist/export/helpers/create-incremental-cache.js +61 -0
- package/dist/node_modules/next/dist/lib/batcher.js +65 -0
- package/dist/node_modules/next/dist/lib/build-custom-route.js +46 -0
- package/dist/node_modules/next/dist/lib/bundler.js +97 -0
- package/dist/node_modules/next/dist/lib/client-and-server-references.js +54 -0
- package/dist/node_modules/next/dist/lib/coalesced-function.js +39 -0
- package/dist/node_modules/next/dist/lib/compile-error.js +14 -0
- package/dist/node_modules/next/dist/lib/constants.js +405 -0
- package/dist/node_modules/next/dist/lib/create-client-router-filter.js +67 -0
- package/dist/node_modules/next/dist/lib/default-transpiled-packages.json +1 -0
- package/dist/node_modules/next/dist/lib/detached-promise.js +32 -0
- package/dist/node_modules/next/dist/lib/detect-typo.js +51 -0
- package/dist/node_modules/next/dist/lib/download-swc.js +183 -0
- package/dist/node_modules/next/dist/lib/error-telemetry-utils.js +42 -0
- package/dist/node_modules/next/dist/lib/fallback.js +100 -0
- package/dist/node_modules/next/dist/lib/fatal-error.js +14 -0
- package/dist/node_modules/next/dist/lib/file-exists.js +53 -0
- package/dist/node_modules/next/dist/lib/find-config.js +102 -0
- package/dist/node_modules/next/dist/lib/find-pages-dir.js +65 -0
- package/dist/node_modules/next/dist/lib/find-root.js +122 -0
- package/dist/node_modules/next/dist/lib/format-cli-help-output.js +84 -0
- package/dist/node_modules/next/dist/lib/format-dynamic-import-path.js +24 -0
- package/dist/node_modules/next/dist/lib/format-server-error.js +74 -0
- package/dist/node_modules/next/dist/lib/framework/boundary-components.js +62 -0
- package/dist/node_modules/next/dist/lib/framework/boundary-constants.js +36 -0
- package/dist/node_modules/next/dist/lib/fs/rename.js +87 -0
- package/dist/node_modules/next/dist/lib/fs/write-atomic.js +28 -0
- package/dist/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +69 -0
- package/dist/node_modules/next/dist/lib/get-files-in-dir.js +33 -0
- package/dist/node_modules/next/dist/lib/get-network-host.js +44 -0
- package/dist/node_modules/next/dist/lib/get-package-version.js +118 -0
- package/dist/node_modules/next/dist/lib/get-project-dir.js +51 -0
- package/dist/node_modules/next/dist/lib/has-necessary-dependencies.js +49 -0
- package/dist/node_modules/next/dist/lib/helpers/get-cache-directory.js +66 -0
- package/dist/node_modules/next/dist/lib/helpers/get-npx-command.js +29 -0
- package/dist/node_modules/next/dist/lib/helpers/get-online.js +50 -0
- package/dist/node_modules/next/dist/lib/helpers/get-pkg-manager.js +63 -0
- package/dist/node_modules/next/dist/lib/helpers/get-registry.js +45 -0
- package/dist/node_modules/next/dist/lib/helpers/get-reserved-port.js +116 -0
- package/dist/node_modules/next/dist/lib/helpers/install.js +83 -0
- package/dist/node_modules/next/dist/lib/import-next-warning.js +50 -0
- package/dist/node_modules/next/dist/lib/inline-static-env.js +112 -0
- package/dist/node_modules/next/dist/lib/install-dependencies.js +40 -0
- package/dist/node_modules/next/dist/lib/interop-default.js +15 -0
- package/dist/node_modules/next/dist/lib/is-api-route.js +15 -0
- package/dist/node_modules/next/dist/lib/is-app-page-route.js +15 -0
- package/dist/node_modules/next/dist/lib/is-app-route-route.js +15 -0
- package/dist/node_modules/next/dist/lib/is-edge-runtime.js +16 -0
- package/dist/node_modules/next/dist/lib/is-error.js +78 -0
- package/dist/node_modules/next/dist/lib/is-internal-component.js +36 -0
- package/dist/node_modules/next/dist/lib/is-serializable-props.js +106 -0
- package/dist/node_modules/next/dist/lib/known-edge-safe-packages.json +1 -0
- package/dist/node_modules/next/dist/lib/load-custom-routes.js +550 -0
- package/dist/node_modules/next/dist/lib/memory/gc-observer.js +53 -0
- package/dist/node_modules/next/dist/lib/memory/shutdown.js +29 -0
- package/dist/node_modules/next/dist/lib/memory/startup.js +47 -0
- package/dist/node_modules/next/dist/lib/memory/trace.js +109 -0
- package/dist/node_modules/next/dist/lib/metadata/constants.js +40 -0
- package/dist/node_modules/next/dist/lib/metadata/default-metadata.js +82 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/alternate.js +55 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/basic.js +307 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/icon-mark.js +22 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/icons.js +64 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/meta.js +123 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/opengraph.js +478 -0
- package/dist/node_modules/next/dist/lib/metadata/generate/utils.js +52 -0
- package/dist/node_modules/next/dist/lib/metadata/get-metadata-route.js +114 -0
- package/dist/node_modules/next/dist/lib/metadata/is-metadata-route.js +221 -0
- package/dist/node_modules/next/dist/lib/metadata/metadata-context.js +18 -0
- package/dist/node_modules/next/dist/lib/metadata/metadata.js +243 -0
- package/dist/node_modules/next/dist/lib/metadata/resolve-metadata.js +859 -0
- package/dist/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js +232 -0
- package/dist/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js +56 -0
- package/dist/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js +199 -0
- package/dist/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js +40 -0
- package/dist/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js +135 -0
- package/dist/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js +7 -0
- package/dist/node_modules/next/dist/lib/metadata/types/extra-types.js +9 -0
- package/dist/node_modules/next/dist/lib/metadata/types/icons.js +6 -0
- package/dist/node_modules/next/dist/lib/metadata/types/manifest-types.js +6 -0
- package/dist/node_modules/next/dist/lib/metadata/types/metadata-interface.js +18 -0
- package/dist/node_modules/next/dist/lib/metadata/types/metadata-types.js +10 -0
- package/dist/node_modules/next/dist/lib/metadata/types/opengraph-types.js +6 -0
- package/dist/node_modules/next/dist/lib/metadata/types/resolvers.js +6 -0
- package/dist/node_modules/next/dist/lib/metadata/types/twitter-types.js +7 -0
- package/dist/node_modules/next/dist/lib/mime-type.js +20 -0
- package/dist/node_modules/next/dist/lib/mkcert.js +204 -0
- package/dist/node_modules/next/dist/lib/multi-file-writer.js +75 -0
- package/dist/node_modules/next/dist/lib/needs-experimental-react.js +16 -0
- package/dist/node_modules/next/dist/lib/non-nullable.js +15 -0
- package/dist/node_modules/next/dist/lib/normalize-path.js +21 -0
- package/dist/node_modules/next/dist/lib/oxford-comma-list.js +15 -0
- package/dist/node_modules/next/dist/lib/page-types.js +18 -0
- package/dist/node_modules/next/dist/lib/patch-incorrect-lockfile.js +185 -0
- package/dist/node_modules/next/dist/lib/pick.js +19 -0
- package/dist/node_modules/next/dist/lib/picocolors.js +177 -0
- package/dist/node_modules/next/dist/lib/pretty-bytes.js +74 -0
- package/dist/node_modules/next/dist/lib/realpath.js +20 -0
- package/dist/node_modules/next/dist/lib/recursive-copy.js +76 -0
- package/dist/node_modules/next/dist/lib/recursive-delete.js +137 -0
- package/dist/node_modules/next/dist/lib/recursive-readdir.js +124 -0
- package/dist/node_modules/next/dist/lib/redirect-status.js +46 -0
- package/dist/node_modules/next/dist/lib/require-instrumentation-client.js +26 -0
- package/dist/node_modules/next/dist/lib/resolve-build-paths.js +149 -0
- package/dist/node_modules/next/dist/lib/resolve-from.js +65 -0
- package/dist/node_modules/next/dist/lib/route-pattern-normalizer.js +107 -0
- package/dist/node_modules/next/dist/lib/scheduler.js +64 -0
- package/dist/node_modules/next/dist/lib/semver-noop.js +18 -0
- package/dist/node_modules/next/dist/lib/server-external-packages.jsonc +103 -0
- package/dist/node_modules/next/dist/lib/setup-exception-listeners.js +11 -0
- package/dist/node_modules/next/dist/lib/static-env.js +92 -0
- package/dist/node_modules/next/dist/lib/try-to-parse-path.js +68 -0
- package/dist/node_modules/next/dist/lib/turbopack-warning.js +186 -0
- package/dist/node_modules/next/dist/lib/typescript/diagnosticFormatter.js +240 -0
- package/dist/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +73 -0
- package/dist/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js +52 -0
- package/dist/node_modules/next/dist/lib/typescript/missingDependencyError.js +27 -0
- package/dist/node_modules/next/dist/lib/typescript/runTypeCheck.js +151 -0
- package/dist/node_modules/next/dist/lib/typescript/type-paths.js +56 -0
- package/dist/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +65 -0
- package/dist/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +394 -0
- package/dist/node_modules/next/dist/lib/url.js +75 -0
- package/dist/node_modules/next/dist/lib/verify-partytown-setup.js +115 -0
- package/dist/node_modules/next/dist/lib/verify-root-layout.js +165 -0
- package/dist/node_modules/next/dist/lib/verify-typescript-setup.js +178 -0
- package/dist/node_modules/next/dist/lib/wait.js +19 -0
- package/dist/node_modules/next/dist/lib/with-promise-cache.js +24 -0
- package/dist/node_modules/next/dist/lib/worker.js +223 -0
- package/dist/node_modules/next/dist/next-devtools/server/shared.js +61 -0
- package/dist/node_modules/next/dist/server/ReactDOMServerPages.js +16 -0
- package/dist/node_modules/next/dist/server/accept-header.js +132 -0
- package/dist/node_modules/next/dist/server/after/after-context.js +140 -0
- package/dist/node_modules/next/dist/server/after/after.js +26 -0
- package/dist/node_modules/next/dist/server/after/awaiter.js +74 -0
- package/dist/node_modules/next/dist/server/after/builtin-request-context.js +38 -0
- package/dist/node_modules/next/dist/server/after/index.js +21 -0
- package/dist/node_modules/next/dist/server/after/run-with-after.js +35 -0
- package/dist/node_modules/next/dist/server/api-utils/get-cookie-parser.js +22 -0
- package/dist/node_modules/next/dist/server/api-utils/index.js +201 -0
- package/dist/node_modules/next/dist/server/api-utils/node/api-resolver.js +395 -0
- package/dist/node_modules/next/dist/server/api-utils/node/parse-body.js +79 -0
- package/dist/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js +86 -0
- package/dist/node_modules/next/dist/server/api-utils/web.js +17 -0
- package/dist/node_modules/next/dist/server/app-render/action-async-storage-instance.js +14 -0
- package/dist/node_modules/next/dist/server/app-render/action-async-storage.external.js +13 -0
- package/dist/node_modules/next/dist/server/app-render/action-handler.js +952 -0
- package/dist/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js +14 -0
- package/dist/node_modules/next/dist/server/app-render/after-task-async-storage.external.js +13 -0
- package/dist/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +249 -0
- package/dist/node_modules/next/dist/server/app-render/app-render-render-utils.js +112 -0
- package/dist/node_modules/next/dist/server/app-render/app-render-scheduling.js +188 -0
- package/dist/node_modules/next/dist/server/app-render/app-render.js +3526 -0
- package/dist/node_modules/next/dist/server/app-render/async-local-storage.js +76 -0
- package/dist/node_modules/next/dist/server/app-render/cache-signal.js +181 -0
- package/dist/node_modules/next/dist/server/app-render/collect-segment-data.js +276 -0
- package/dist/node_modules/next/dist/server/app-render/console-async-storage-instance.js +14 -0
- package/dist/node_modules/next/dist/server/app-render/console-async-storage.external.js +13 -0
- package/dist/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +33 -0
- package/dist/node_modules/next/dist/server/app-render/create-component-tree.js +754 -0
- package/dist/node_modules/next/dist/server/app-render/create-error-handler.js +187 -0
- package/dist/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +76 -0
- package/dist/node_modules/next/dist/server/app-render/csrf-protection.js +75 -0
- package/dist/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js +14 -0
- package/dist/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js +13 -0
- package/dist/node_modules/next/dist/server/app-render/dynamic-rendering.js +828 -0
- package/dist/node_modules/next/dist/server/app-render/encryption-utils-server.js +114 -0
- package/dist/node_modules/next/dist/server/app-render/encryption-utils.js +93 -0
- package/dist/node_modules/next/dist/server/app-render/encryption.js +238 -0
- package/dist/node_modules/next/dist/server/app-render/entry-base.js +237 -0
- package/dist/node_modules/next/dist/server/app-render/flight-render-result.js +28 -0
- package/dist/node_modules/next/dist/server/app-render/get-asset-query-string.js +29 -0
- package/dist/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js +49 -0
- package/dist/node_modules/next/dist/server/app-render/get-layer-assets.js +65 -0
- package/dist/node_modules/next/dist/server/app-render/get-preloadable-fonts.js +39 -0
- package/dist/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js +44 -0
- package/dist/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js +25 -0
- package/dist/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js +19 -0
- package/dist/node_modules/next/dist/server/app-render/interop-default.js +17 -0
- package/dist/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js +92 -0
- package/dist/node_modules/next/dist/server/app-render/manifests-singleton.js +257 -0
- package/dist/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js +28 -0
- package/dist/node_modules/next/dist/server/app-render/module-loading/track-dynamic-import.js +57 -0
- package/dist/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js +32 -0
- package/dist/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js +66 -0
- package/dist/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js +49 -0
- package/dist/node_modules/next/dist/server/app-render/postponed-state.js +156 -0
- package/dist/node_modules/next/dist/server/app-render/prospective-render-utils.js +73 -0
- package/dist/node_modules/next/dist/server/app-render/react-large-shell-error.js +17 -0
- package/dist/node_modules/next/dist/server/app-render/react-server.node.js +39 -0
- package/dist/node_modules/next/dist/server/app-render/render-css-resource.js +52 -0
- package/dist/node_modules/next/dist/server/app-render/required-scripts.js +76 -0
- package/dist/node_modules/next/dist/server/app-render/rsc/postpone.js +18 -0
- package/dist/node_modules/next/dist/server/app-render/rsc/preloads.js +74 -0
- package/dist/node_modules/next/dist/server/app-render/rsc/taint.js +79 -0
- package/dist/node_modules/next/dist/server/app-render/segment-explorer-path.js +103 -0
- package/dist/node_modules/next/dist/server/app-render/server-inserted-html.js +77 -0
- package/dist/node_modules/next/dist/server/app-render/staged-rendering.js +273 -0
- package/dist/node_modules/next/dist/server/app-render/staged-validation.js +32 -0
- package/dist/node_modules/next/dist/server/app-render/strip-flight-headers.js +18 -0
- package/dist/node_modules/next/dist/server/app-render/types.js +59 -0
- package/dist/node_modules/next/dist/server/app-render/use-flight-response.js +212 -0
- package/dist/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +185 -0
- package/dist/node_modules/next/dist/server/app-render/work-async-storage-instance.js +14 -0
- package/dist/node_modules/next/dist/server/app-render/work-async-storage.external.js +13 -0
- package/dist/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js +14 -0
- package/dist/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +252 -0
- package/dist/node_modules/next/dist/server/async-storage/draft-mode-provider.js +62 -0
- package/dist/node_modules/next/dist/server/async-storage/request-store.js +144 -0
- package/dist/node_modules/next/dist/server/async-storage/with-store.js +6 -0
- package/dist/node_modules/next/dist/server/async-storage/work-store.js +94 -0
- package/dist/node_modules/next/dist/server/base-http/helpers.js +36 -0
- package/dist/node_modules/next/dist/server/base-http/index.js +54 -0
- package/dist/node_modules/next/dist/server/base-http/node.js +147 -0
- package/dist/node_modules/next/dist/server/base-http/web.js +124 -0
- package/dist/node_modules/next/dist/server/base-server.js +1862 -0
- package/dist/node_modules/next/dist/server/body-streams.js +114 -0
- package/dist/node_modules/next/dist/server/cache-dir.js +26 -0
- package/dist/node_modules/next/dist/server/capsize-font-metrics.json +181516 -0
- package/dist/node_modules/next/dist/server/ci-info.js +41 -0
- package/dist/node_modules/next/dist/server/client-component-renderer-logger.js +70 -0
- package/dist/node_modules/next/dist/server/config-schema.js +632 -0
- package/dist/node_modules/next/dist/server/config-shared.js +319 -0
- package/dist/node_modules/next/dist/server/config-utils.js +185 -0
- package/dist/node_modules/next/dist/server/config.js +1474 -0
- package/dist/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js +96 -0
- package/dist/node_modules/next/dist/server/crypto-utils.js +70 -0
- package/dist/node_modules/next/dist/server/dev/browser-logs/file-logger.js +183 -0
- package/dist/node_modules/next/dist/server/dev/browser-logs/receive-logs.js +512 -0
- package/dist/node_modules/next/dist/server/dev/browser-logs/source-map.js +225 -0
- package/dist/node_modules/next/dist/server/dev/debug-channel.js +87 -0
- package/dist/node_modules/next/dist/server/dev/dev-indicator-server-state.js +15 -0
- package/dist/node_modules/next/dist/server/dev/get-source-map-from-file.js +100 -0
- package/dist/node_modules/next/dist/server/dev/hot-middleware.js +274 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-rspack.js +171 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-shared-utils.js +56 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +1247 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-types.js +58 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1382 -0
- package/dist/node_modules/next/dist/server/dev/log-requests.js +141 -0
- package/dist/node_modules/next/dist/server/dev/messages.js +74 -0
- package/dist/node_modules/next/dist/server/dev/middleware-turbopack.js +393 -0
- package/dist/node_modules/next/dist/server/dev/middleware-webpack.js +473 -0
- package/dist/node_modules/next/dist/server/dev/node-stack-frames.js +72 -0
- package/dist/node_modules/next/dist/server/dev/on-demand-entry-handler.js +704 -0
- package/dist/node_modules/next/dist/server/dev/parse-version-info.js +108 -0
- package/dist/node_modules/next/dist/server/dev/require-cache.js +49 -0
- package/dist/node_modules/next/dist/server/dev/serialized-errors.js +67 -0
- package/dist/node_modules/next/dist/server/dev/static-paths-worker.js +103 -0
- package/dist/node_modules/next/dist/server/dev/turbopack-utils.js +696 -0
- package/dist/node_modules/next/dist/server/dynamic-rendering-utils.js +86 -0
- package/dist/node_modules/next/dist/server/font-utils.js +43 -0
- package/dist/node_modules/next/dist/server/get-app-route-from-entrypoint.js +30 -0
- package/dist/node_modules/next/dist/server/get-page-files.js +23 -0
- package/dist/node_modules/next/dist/server/get-route-from-entrypoint.js +35 -0
- package/dist/node_modules/next/dist/server/htmlescape.js +37 -0
- package/dist/node_modules/next/dist/server/image-optimizer.js +1090 -0
- package/dist/node_modules/next/dist/server/instrumentation/types.js +6 -0
- package/dist/node_modules/next/dist/server/instrumentation/utils.js +21 -0
- package/dist/node_modules/next/dist/server/internal-utils.js +39 -0
- package/dist/node_modules/next/dist/server/is-private-ip.js +36 -0
- package/dist/node_modules/next/dist/server/lib/app-dir-module.js +59 -0
- package/dist/node_modules/next/dist/server/lib/app-info-log.js +154 -0
- package/dist/node_modules/next/dist/server/lib/async-callback-set.js +29 -0
- package/dist/node_modules/next/dist/server/lib/cache-control.js +22 -0
- package/dist/node_modules/next/dist/server/lib/cache-handlers/default.external.js +18 -0
- package/dist/node_modules/next/dist/server/lib/cache-handlers/default.js +160 -0
- package/dist/node_modules/next/dist/server/lib/cache-handlers/types.js +8 -0
- package/dist/node_modules/next/dist/server/lib/chrome-devtools-workspace.js +116 -0
- package/dist/node_modules/next/dist/server/lib/clone-response.js +77 -0
- package/dist/node_modules/next/dist/server/lib/cpu-profile.js +28 -0
- package/dist/node_modules/next/dist/server/lib/decode-query-path-parameter.js +26 -0
- package/dist/node_modules/next/dist/server/lib/dedupe-fetch.js +163 -0
- package/dist/node_modules/next/dist/server/lib/dev-bundler-service.js +95 -0
- package/dist/node_modules/next/dist/server/lib/etag.js +56 -0
- package/dist/node_modules/next/dist/server/lib/experimental/create-env-definitions.js +48 -0
- package/dist/node_modules/next/dist/server/lib/experimental/ppr.js +47 -0
- package/dist/node_modules/next/dist/server/lib/find-page-file.js +127 -0
- package/dist/node_modules/next/dist/server/lib/fix-mojibake.js +25 -0
- package/dist/node_modules/next/dist/server/lib/format-hostname.js +16 -0
- package/dist/node_modules/next/dist/server/lib/i18n-provider.js +129 -0
- package/dist/node_modules/next/dist/server/lib/implicit-tags.js +77 -0
- package/dist/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +333 -0
- package/dist/node_modules/next/dist/server/lib/incremental-cache/index.js +479 -0
- package/dist/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +40 -0
- package/dist/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js +73 -0
- package/dist/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js +55 -0
- package/dist/node_modules/next/dist/server/lib/is-ipv6.js +41 -0
- package/dist/node_modules/next/dist/server/lib/lazy-result.js +46 -0
- package/dist/node_modules/next/dist/server/lib/lru-cache.js +183 -0
- package/dist/node_modules/next/dist/server/lib/match-next-data-pathname.js +18 -0
- package/dist/node_modules/next/dist/server/lib/mock-request.js +416 -0
- package/dist/node_modules/next/dist/server/lib/module-loader/module-loader.js +8 -0
- package/dist/node_modules/next/dist/server/lib/module-loader/node-module-loader.js +25 -0
- package/dist/node_modules/next/dist/server/lib/module-loader/route-module-loader.js +26 -0
- package/dist/node_modules/next/dist/server/lib/node-fs-methods.js +28 -0
- package/dist/node_modules/next/dist/server/lib/parse-stack.js +46 -0
- package/dist/node_modules/next/dist/server/lib/patch-fetch.js +945 -0
- package/dist/node_modules/next/dist/server/lib/patch-set-header.js +38 -0
- package/dist/node_modules/next/dist/server/lib/render-server.js +152 -0
- package/dist/node_modules/next/dist/server/lib/router-server.js +672 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/block-cross-site.js +76 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/build-data-route.js +48 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js +50 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js +211 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/decode-path-params.js +42 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/filesystem.js +590 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js +89 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js +96 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/is-postpone.js +16 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/proxy-request.js +118 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +608 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/route-types-utils.js +286 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/router-server-context.js +26 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/typegen.js +613 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/types.js +6 -0
- package/dist/node_modules/next/dist/server/lib/server-action-request-meta.js +53 -0
- package/dist/node_modules/next/dist/server/lib/server-ipc/utils.js +80 -0
- package/dist/node_modules/next/dist/server/lib/source-maps.js +196 -0
- package/dist/node_modules/next/dist/server/lib/start-server.js +460 -0
- package/dist/node_modules/next/dist/server/lib/streaming-metadata.js +38 -0
- package/dist/node_modules/next/dist/server/lib/to-route.js +37 -0
- package/dist/node_modules/next/dist/server/lib/trace/constants.js +203 -0
- package/dist/node_modules/next/dist/server/lib/trace/tracer.js +270 -0
- package/dist/node_modules/next/dist/server/lib/trace/utils.js +16 -0
- package/dist/node_modules/next/dist/server/lib/types.js +6 -0
- package/dist/node_modules/next/dist/server/lib/utils.js +249 -0
- package/dist/node_modules/next/dist/server/lib/worker-utils.js +36 -0
- package/dist/node_modules/next/dist/server/load-components.js +177 -0
- package/dist/node_modules/next/dist/server/load-default-error-components.js +41 -0
- package/dist/node_modules/next/dist/server/load-manifest.external.js +97 -0
- package/dist/node_modules/next/dist/server/match-bundle.js +25 -0
- package/dist/node_modules/next/dist/server/mcp/get-mcp-middleware.js +49 -0
- package/dist/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js +41 -0
- package/dist/node_modules/next/dist/server/mcp/mcp-telemetry-tracker.js +82 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-errors.js +107 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-logs.js +61 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-page-metadata.js +180 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-project-metadata.js +55 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-routes.js +171 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js +113 -0
- package/dist/node_modules/next/dist/server/mcp/tools/next-instance-error-state.js +31 -0
- package/dist/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js +90 -0
- package/dist/node_modules/next/dist/server/mcp/tools/utils/format-errors.js +147 -0
- package/dist/node_modules/next/dist/server/next-server.js +1459 -0
- package/dist/node_modules/next/dist/server/next-typescript.js +13 -0
- package/dist/node_modules/next/dist/server/next.js +452 -0
- package/dist/node_modules/next/dist/server/node-environment-baseline.js +25 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js +246 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/console-exit.js +49 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/console-file.js +56 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/date.js +52 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/error-inspect.js +8 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +570 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js +33 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/node-crypto.js +103 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/random.js +28 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.js +489 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/utils.js +186 -0
- package/dist/node_modules/next/dist/server/node-environment-extensions/web-crypto.js +45 -0
- package/dist/node_modules/next/dist/server/node-environment.js +19 -0
- package/dist/node_modules/next/dist/server/node-polyfill-crypto.js +21 -0
- package/dist/node_modules/next/dist/server/normalizers/absolute-filename-normalizer.js +33 -0
- package/dist/node_modules/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js +54 -0
- package/dist/node_modules/next/dist/server/normalizers/built/app/app-filename-normalizer.js +22 -0
- package/dist/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js +40 -0
- package/dist/node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js +55 -0
- package/dist/node_modules/next/dist/server/normalizers/built/app/index.js +42 -0
- package/dist/node_modules/next/dist/server/normalizers/built/pages/index.js +44 -0
- package/dist/node_modules/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js +55 -0
- package/dist/node_modules/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js +22 -0
- package/dist/node_modules/next/dist/server/normalizers/built/pages/pages-page-normalizer.js +19 -0
- package/dist/node_modules/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js +19 -0
- package/dist/node_modules/next/dist/server/normalizers/locale-route-normalizer.js +26 -0
- package/dist/node_modules/next/dist/server/normalizers/normalizer.js +6 -0
- package/dist/node_modules/next/dist/server/normalizers/normalizers.js +23 -0
- package/dist/node_modules/next/dist/server/normalizers/prefixing-normalizer.js +26 -0
- package/dist/node_modules/next/dist/server/normalizers/request/base-path.js +25 -0
- package/dist/node_modules/next/dist/server/normalizers/request/next-data.js +38 -0
- package/dist/node_modules/next/dist/server/normalizers/request/pathname-normalizer.js +6 -0
- package/dist/node_modules/next/dist/server/normalizers/request/prefix.js +39 -0
- package/dist/node_modules/next/dist/server/normalizers/request/rsc.js +19 -0
- package/dist/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js +32 -0
- package/dist/node_modules/next/dist/server/normalizers/request/suffix.js +27 -0
- package/dist/node_modules/next/dist/server/normalizers/underscore-normalizer.js +17 -0
- package/dist/node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js +17 -0
- package/dist/node_modules/next/dist/server/og/image-response.js +53 -0
- package/dist/node_modules/next/dist/server/patch-error-inspect.js +436 -0
- package/dist/node_modules/next/dist/server/pipe-readable.js +140 -0
- package/dist/node_modules/next/dist/server/post-process.js +39 -0
- package/dist/node_modules/next/dist/server/render-result.js +195 -0
- package/dist/node_modules/next/dist/server/render.js +1138 -0
- package/dist/node_modules/next/dist/server/request/connection.js +111 -0
- package/dist/node_modules/next/dist/server/request/cookies.js +220 -0
- package/dist/node_modules/next/dist/server/request/draft-mode.js +207 -0
- package/dist/node_modules/next/dist/server/request/fallback-params.js +69 -0
- package/dist/node_modules/next/dist/server/request/headers.js +219 -0
- package/dist/node_modules/next/dist/server/request/params.js +415 -0
- package/dist/node_modules/next/dist/server/request/pathname.js +104 -0
- package/dist/node_modules/next/dist/server/request/root-params.js +157 -0
- package/dist/node_modules/next/dist/server/request/search-params.js +432 -0
- package/dist/node_modules/next/dist/server/request/utils.js +51 -0
- package/dist/node_modules/next/dist/server/request-meta.js +55 -0
- package/dist/node_modules/next/dist/server/require-hook.js +71 -0
- package/dist/node_modules/next/dist/server/require.js +109 -0
- package/dist/node_modules/next/dist/server/response-cache/index.js +311 -0
- package/dist/node_modules/next/dist/server/response-cache/types.js +41 -0
- package/dist/node_modules/next/dist/server/response-cache/utils.js +103 -0
- package/dist/node_modules/next/dist/server/response-cache/web.js +101 -0
- package/dist/node_modules/next/dist/server/resume-data-cache/cache-store.js +84 -0
- package/dist/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +115 -0
- package/dist/node_modules/next/dist/server/revalidation-utils.js +152 -0
- package/dist/node_modules/next/dist/server/route-definitions/app-page-route-definition.js +16 -0
- package/dist/node_modules/next/dist/server/route-definitions/app-route-route-definition.js +6 -0
- package/dist/node_modules/next/dist/server/route-definitions/locale-route-definition.js +6 -0
- package/dist/node_modules/next/dist/server/route-definitions/pages-api-route-definition.js +6 -0
- package/dist/node_modules/next/dist/server/route-definitions/pages-route-definition.js +6 -0
- package/dist/node_modules/next/dist/server/route-definitions/route-definition.js +6 -0
- package/dist/node_modules/next/dist/server/route-kind.js +32 -0
- package/dist/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js +239 -0
- package/dist/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js +120 -0
- package/dist/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.js +6 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +55 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js +43 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +90 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js +112 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js +77 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js +77 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js +28 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js +106 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js +42 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js +6 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js +30 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js +6 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js +34 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js +20 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js +21 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js +55 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js +64 -0
- package/dist/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.js +6 -0
- package/dist/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js +18 -0
- package/dist/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js +15 -0
- package/dist/node_modules/next/dist/server/route-matchers/locale-route-matcher.js +68 -0
- package/dist/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js +30 -0
- package/dist/node_modules/next/dist/server/route-matchers/pages-route-matcher.js +30 -0
- package/dist/node_modules/next/dist/server/route-matchers/route-matcher.js +54 -0
- package/dist/node_modules/next/dist/server/route-matches/app-page-route-match.js +6 -0
- package/dist/node_modules/next/dist/server/route-matches/app-route-route-match.js +6 -0
- package/dist/node_modules/next/dist/server/route-matches/locale-route-match.js +6 -0
- package/dist/node_modules/next/dist/server/route-matches/pages-api-route-match.js +16 -0
- package/dist/node_modules/next/dist/server/route-matches/pages-route-match.js +6 -0
- package/dist/node_modules/next/dist/server/route-matches/route-match.js +6 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +48 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/module.compiled.js +36 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/module.js +132 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/module.render.js +24 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js +87 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js +140 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js +125 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js +85 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/helpers/clean-url.js +24 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js +29 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js +15 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js +20 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/module.compiled.js +36 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/module.js +889 -0
- package/dist/node_modules/next/dist/server/route-modules/app-route/shared-modules.js +56 -0
- package/dist/node_modules/next/dist/server/route-modules/checks.js +45 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/builtin/_error.js +100 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/module.compiled.js +20 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/module.js +92 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/module.render.js +24 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/pages-handler.js +522 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js +102 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js +4 -0
- package/dist/node_modules/next/dist/server/route-modules/pages-api/module.compiled.js +20 -0
- package/dist/node_modules/next/dist/server/route-modules/pages-api/module.js +58 -0
- package/dist/node_modules/next/dist/server/route-modules/route-module.js +597 -0
- package/dist/node_modules/next/dist/server/runtime-reacts.external.js +46 -0
- package/dist/node_modules/next/dist/server/send-payload.js +88 -0
- package/dist/node_modules/next/dist/server/send-response.js +70 -0
- package/dist/node_modules/next/dist/server/serve-static.js +66 -0
- package/dist/node_modules/next/dist/server/server-route-utils.js +30 -0
- package/dist/node_modules/next/dist/server/server-utils.js +323 -0
- package/dist/node_modules/next/dist/server/setup-http-agent-env.js +31 -0
- package/dist/node_modules/next/dist/server/stream-utils/encoded-tags.js +114 -0
- package/dist/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +737 -0
- package/dist/node_modules/next/dist/server/stream-utils/uint8array-helpers.js +69 -0
- package/dist/node_modules/next/dist/server/typescript/constant.js +97 -0
- package/dist/node_modules/next/dist/server/typescript/index.js +199 -0
- package/dist/node_modules/next/dist/server/typescript/rules/client-boundary.js +97 -0
- package/dist/node_modules/next/dist/server/typescript/rules/config.js +501 -0
- package/dist/node_modules/next/dist/server/typescript/rules/entry.js +149 -0
- package/dist/node_modules/next/dist/server/typescript/rules/error.js +38 -0
- package/dist/node_modules/next/dist/server/typescript/rules/metadata.js +234 -0
- package/dist/node_modules/next/dist/server/typescript/rules/server-boundary.js +115 -0
- package/dist/node_modules/next/dist/server/typescript/rules/server.js +79 -0
- package/dist/node_modules/next/dist/server/typescript/utils.js +212 -0
- package/dist/node_modules/next/dist/server/use-cache/cache-life.js +161 -0
- package/dist/node_modules/next/dist/server/use-cache/cache-tag.js +50 -0
- package/dist/node_modules/next/dist/server/use-cache/constants.js +28 -0
- package/dist/node_modules/next/dist/server/use-cache/handlers.js +121 -0
- package/dist/node_modules/next/dist/server/use-cache/use-cache-errors.js +36 -0
- package/dist/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1336 -0
- package/dist/node_modules/next/dist/server/utils.js +73 -0
- package/dist/node_modules/next/dist/server/web/adapter.js +388 -0
- package/dist/node_modules/next/dist/server/web/edge-route-module-wrapper.js +122 -0
- package/dist/node_modules/next/dist/server/web/error.js +54 -0
- package/dist/node_modules/next/dist/server/web/exports/index.js +56 -0
- package/dist/node_modules/next/dist/server/web/get-edge-preview-props.js +23 -0
- package/dist/node_modules/next/dist/server/web/globals.js +128 -0
- package/dist/node_modules/next/dist/server/web/http.js +39 -0
- package/dist/node_modules/next/dist/server/web/internal-edge-wait-until.js +64 -0
- package/dist/node_modules/next/dist/server/web/next-url.js +195 -0
- package/dist/node_modules/next/dist/server/web/sandbox/context.js +462 -0
- package/dist/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js +35 -0
- package/dist/node_modules/next/dist/server/web/sandbox/index.js +28 -0
- package/dist/node_modules/next/dist/server/web/sandbox/resource-managers.js +88 -0
- package/dist/node_modules/next/dist/server/web/sandbox/sandbox.js +134 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/adapters/headers.js +192 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js +142 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js +30 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +211 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/cookies.js +29 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/fetch-event.js +98 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/image-response.js +22 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/request.js +99 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/response.js +136 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/revalidate.js +206 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +284 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/unstable-no-store.js +49 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/url-pattern.js +14 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/user-agent.js +46 -0
- package/dist/node_modules/next/dist/server/web/types.js +6 -0
- package/dist/node_modules/next/dist/server/web/utils.js +151 -0
- package/dist/node_modules/next/dist/server/web/web-on-close.js +87 -0
- package/dist/node_modules/next/dist/shared/lib/action-revalidation-kind.js +31 -0
- package/dist/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js +50 -0
- package/dist/node_modules/next/dist/shared/lib/app-router-types.js +27 -0
- package/dist/node_modules/next/dist/shared/lib/constants.js +448 -0
- package/dist/node_modules/next/dist/shared/lib/deep-freeze.js +30 -0
- package/dist/node_modules/next/dist/shared/lib/deployment-id.js +36 -0
- package/dist/node_modules/next/dist/shared/lib/dset.js +34 -0
- package/dist/node_modules/next/dist/shared/lib/encode-uri-path.js +15 -0
- package/dist/node_modules/next/dist/shared/lib/entry-constants.js +36 -0
- package/dist/node_modules/next/dist/shared/lib/error-source.js +36 -0
- package/dist/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +39 -0
- package/dist/node_modules/next/dist/shared/lib/errors/constants.js +19 -0
- package/dist/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js +24 -0
- package/dist/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/escape-regexp.js +22 -0
- package/dist/node_modules/next/dist/shared/lib/get-hostname.js +23 -0
- package/dist/node_modules/next/dist/shared/lib/hash.js +42 -0
- package/dist/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js +18 -0
- package/dist/node_modules/next/dist/shared/lib/head.js +163 -0
- package/dist/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js +60 -0
- package/dist/node_modules/next/dist/shared/lib/html-context.shared-runtime.js +40 -0
- package/dist/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js +25 -0
- package/dist/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js +59 -0
- package/dist/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js +54 -0
- package/dist/node_modules/next/dist/shared/lib/image-blur-svg.js +22 -0
- package/dist/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js +19 -0
- package/dist/node_modules/next/dist/shared/lib/image-config.js +75 -0
- package/dist/node_modules/next/dist/shared/lib/invariant-error.js +18 -0
- package/dist/node_modules/next/dist/shared/lib/is-internal.js +39 -0
- package/dist/node_modules/next/dist/shared/lib/is-plain-object.js +42 -0
- package/dist/node_modules/next/dist/shared/lib/is-thenable.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/isomorphic/path.js +14 -0
- package/dist/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js +37 -0
- package/dist/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js +19 -0
- package/dist/node_modules/next/dist/shared/lib/loadable.shared-runtime.js +246 -0
- package/dist/node_modules/next/dist/shared/lib/magic-identifier.js +218 -0
- package/dist/node_modules/next/dist/shared/lib/match-local-pattern.js +46 -0
- package/dist/node_modules/next/dist/shared/lib/match-remote-pattern.js +63 -0
- package/dist/node_modules/next/dist/shared/lib/modern-browserslist-target.js +15 -0
- package/dist/node_modules/next/dist/shared/lib/no-fallback-error.external.js +18 -0
- package/dist/node_modules/next/dist/shared/lib/normalized-asset-prefix.js +28 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js +26 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js +18 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js +18 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/get-page-paths.js +40 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/normalize-data-path.js +23 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js +26 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js +19 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/promise-with-resolvers.js +26 -0
- package/dist/node_modules/next/dist/shared/lib/router/adapters.js +136 -0
- package/dist/node_modules/next/dist/shared/lib/router/routes/app.js +122 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/add-locale.js +28 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/app-paths.js +51 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js +17 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js +24 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +16 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js +27 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/format-url.js +111 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +167 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js +52 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js +25 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js +90 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/html-bots.js +17 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/index.js +30 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js +33 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/interception-routes.js +108 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/is-bot.js +57 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js +26 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js +31 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +29 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/parse-path.js +33 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +36 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/parse-url.js +32 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/path-match.js +49 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js +292 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/querystring.js +79 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/relativize-url.js +40 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js +39 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +21 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js +116 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js +113 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +45 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/route-regex.js +256 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +244 -0
- package/dist/node_modules/next/dist/shared/lib/router-context.shared-runtime.js +18 -0
- package/dist/node_modules/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js +52 -0
- package/dist/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js +99 -0
- package/dist/node_modules/next/dist/shared/lib/segment.js +102 -0
- package/dist/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js +35 -0
- package/dist/node_modules/next/dist/shared/lib/server-reference-info.js +52 -0
- package/dist/node_modules/next/dist/shared/lib/side-effect.js +63 -0
- package/dist/node_modules/next/dist/shared/lib/size-limit.js +35 -0
- package/dist/node_modules/next/dist/shared/lib/turbopack/internal-error.js +53 -0
- package/dist/node_modules/next/dist/shared/lib/turbopack/utils.js +279 -0
- package/dist/node_modules/next/dist/shared/lib/utils/warn-once.js +22 -0
- package/dist/node_modules/next/dist/shared/lib/utils.js +207 -0
- package/dist/node_modules/next/dist/shared/lib/zod.js +101 -0
- package/dist/node_modules/next/dist/telemetry/anonymous-meta.js +89 -0
- package/dist/node_modules/next/dist/telemetry/detached-flush.js +56 -0
- package/dist/node_modules/next/dist/telemetry/events/build.js +174 -0
- package/dist/node_modules/next/dist/telemetry/events/index.js +41 -0
- package/dist/node_modules/next/dist/telemetry/events/plugins.js +51 -0
- package/dist/node_modules/next/dist/telemetry/events/swc-load-failure.js +55 -0
- package/dist/node_modules/next/dist/telemetry/events/version.js +66 -0
- package/dist/node_modules/next/dist/telemetry/flush-telemetry.js +19 -0
- package/dist/node_modules/next/dist/telemetry/post-telemetry-payload.js +48 -0
- package/dist/node_modules/next/dist/telemetry/project-id.js +48 -0
- package/dist/node_modules/next/dist/telemetry/storage.js +301 -0
- package/dist/node_modules/next/dist/trace/index.js +54 -0
- package/dist/node_modules/next/dist/trace/report/index.js +37 -0
- package/dist/node_modules/next/dist/trace/report/to-json-build.js +137 -0
- package/dist/node_modules/next/dist/trace/report/to-json.js +151 -0
- package/dist/node_modules/next/dist/trace/report/to-telemetry.js +36 -0
- package/dist/node_modules/next/dist/trace/shared.js +39 -0
- package/dist/node_modules/next/dist/trace/trace.js +197 -0
- package/dist/node_modules/next/package.json +380 -0
- package/dist/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
- package/dist/node_modules/react/cjs/react-jsx-dev-runtime.production.js +14 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.production.js +34 -0
- package/dist/node_modules/react/cjs/react.production.js +542 -0
- package/dist/node_modules/react/compiler-runtime.js +14 -0
- package/dist/node_modules/react/index.js +7 -0
- package/dist/node_modules/react/jsx-dev-runtime.js +7 -0
- package/dist/node_modules/react/jsx-runtime.js +7 -0
- package/dist/node_modules/react/package.json +51 -0
- package/dist/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +6603 -0
- package/dist/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +6692 -0
- package/dist/node_modules/react-dom/cjs/react-dom-server.browser.production.js +7410 -0
- package/dist/node_modules/react-dom/cjs/react-dom-server.edge.production.js +7512 -0
- package/dist/node_modules/react-dom/cjs/react-dom-server.node.production.js +7707 -0
- package/dist/node_modules/react-dom/cjs/react-dom.production.js +210 -0
- package/dist/node_modules/react-dom/index.js +38 -0
- package/dist/node_modules/react-dom/package.json +117 -0
- package/dist/node_modules/react-dom/server.browser.js +16 -0
- package/dist/node_modules/react-dom/server.edge.js +17 -0
- package/dist/node_modules/react-dom/server.node.js +18 -0
- package/dist/node_modules/react-dom/static.node.js +14 -0
- package/dist/node_modules/sharp/lib/channel.js +177 -0
- package/dist/node_modules/sharp/lib/colour.js +195 -0
- package/dist/node_modules/sharp/lib/composite.js +212 -0
- package/dist/node_modules/sharp/lib/constructor.js +499 -0
- package/dist/node_modules/sharp/lib/index.js +16 -0
- package/dist/node_modules/sharp/lib/input.js +809 -0
- package/dist/node_modules/sharp/lib/is.js +143 -0
- package/dist/node_modules/sharp/lib/libvips.js +207 -0
- package/dist/node_modules/sharp/lib/operation.js +1016 -0
- package/dist/node_modules/sharp/lib/output.js +1666 -0
- package/dist/node_modules/sharp/lib/resize.js +595 -0
- package/dist/node_modules/sharp/lib/sharp.js +121 -0
- package/dist/node_modules/sharp/lib/utility.js +291 -0
- package/dist/node_modules/sharp/node_modules/semver/classes/comparator.js +143 -0
- package/dist/node_modules/sharp/node_modules/semver/classes/range.js +557 -0
- package/dist/node_modules/sharp/node_modules/semver/classes/semver.js +333 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/cmp.js +54 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/coerce.js +62 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/compare.js +7 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/eq.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/gt.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/gte.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/lt.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/lte.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/neq.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/parse.js +18 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/satisfies.js +12 -0
- package/dist/node_modules/sharp/node_modules/semver/internal/constants.js +37 -0
- package/dist/node_modules/sharp/node_modules/semver/internal/debug.js +11 -0
- package/dist/node_modules/sharp/node_modules/semver/internal/identifiers.js +29 -0
- package/dist/node_modules/sharp/node_modules/semver/internal/lrucache.js +42 -0
- package/dist/node_modules/sharp/node_modules/semver/internal/parse-options.js +17 -0
- package/dist/node_modules/sharp/node_modules/semver/internal/re.js +223 -0
- package/dist/node_modules/sharp/node_modules/semver/package.json +78 -0
- package/dist/node_modules/sharp/package.json +202 -0
- package/dist/node_modules/styled-jsx/dist/index/index.js +499 -0
- package/dist/node_modules/styled-jsx/index.js +1 -0
- package/dist/node_modules/styled-jsx/package.json +132 -0
- package/dist/node_modules/styled-jsx/style.js +1 -0
- package/dist/package.json +50 -0
- package/dist/public/brand-v2-preview.html +778 -0
- package/dist/public/clawcrib_logo.png +0 -0
- package/dist/public/colors.css +134 -0
- package/dist/public/demo-icons.html +351 -0
- package/dist/public/favicon.svg +69 -0
- package/dist/public/file.svg +1 -0
- package/dist/public/globe.svg +1 -0
- package/dist/public/landing-blueprint.jpg +0 -0
- package/dist/public/landing-crib-3d.jpg +0 -0
- package/dist/public/logo-bracket-claw.svg +69 -0
- package/dist/public/logo-icon.svg +31 -0
- package/dist/public/logo-minimal.svg +24 -0
- package/dist/public/logo-monogram.svg +41 -0
- package/dist/public/logo-primary.svg +34 -0
- package/dist/public/next.svg +1 -0
- package/dist/public/openclaw_logo.jpeg +0 -0
- package/dist/public/robots.txt +7 -0
- package/dist/public/sitemap.xml +63 -0
- package/dist/public/textures/Carpet004/Carpet004_1K-JPG_Color.jpg +0 -0
- package/dist/public/textures/Carpet004/Carpet004_1K-JPG_NormalGL.jpg +0 -0
- package/dist/public/textures/Carpet004/Carpet004_1K-JPG_Roughness.jpg +0 -0
- package/dist/public/textures/Fabric030/Fabric030_1K-JPG_Color.jpg +0 -0
- package/dist/public/textures/Fabric030/Fabric030_1K-JPG_NormalGL.jpg +0 -0
- package/dist/public/textures/Fabric030/Fabric030_1K-JPG_Roughness.jpg +0 -0
- package/dist/public/textures/Plaster001/Plaster001_1K-JPG_Color.jpg +0 -0
- package/dist/public/textures/Plaster001/Plaster001_1K-JPG_NormalGL.jpg +0 -0
- package/dist/public/textures/Plaster001/Plaster001_1K-JPG_Roughness.jpg +0 -0
- package/dist/public/textures/WoodFloor051/WoodFloor051_1K-JPG_Color.jpg +0 -0
- package/dist/public/textures/WoodFloor051/WoodFloor051_1K-JPG_NormalGL.jpg +0 -0
- package/dist/public/textures/WoodFloor051/WoodFloor051_1K-JPG_Roughness.jpg +0 -0
- package/dist/public/vercel.svg +1 -0
- package/dist/public/window.svg +1 -0
- package/dist/server.js +38 -0
- package/package.json +29 -0
|
@@ -0,0 +1,1707 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,64973,e=>{"use strict";let t,r,a,i;var s,n,o,l,c,u,f,d,h,p,m,g,v,x,A,D,w,S,y,T,C,B,E,M,b,I=e.i(18050),P=e.i(75056),R=e.i(39355),F=e.i(43257),U=e.i(31067),L=e.i(53067),G=e.i(71645),O=e.i(90072);let N=G.forwardRef(({light:e,args:t,map:r,toneMapped:a=!1,color:i="white",form:s="rect",intensity:n=1,scale:o=1,target:l=[0,0,0],children:c,...u},f)=>{let d=G.useRef(null);return G.useImperativeHandle(f,()=>d.current,[]),G.useLayoutEffect(()=>{c||u.material||((0,L.applyProps)(d.current.material,{color:i}),d.current.material.color.multiplyScalar(n))},[i,n,c,u.material]),G.useLayoutEffect(()=>{u.rotation||d.current.quaternion.identity(),l&&!u.rotation&&("boolean"==typeof l?d.current.lookAt(0,0,0):d.current.lookAt(Array.isArray(l)?new O.Vector3(...l):l))},[l,u.rotation]),o=Array.isArray(o)&&2===o.length?[o[0],o[1],1]:o,G.createElement("mesh",(0,U.default)({ref:d,scale:o},u),"circle"===s?G.createElement("ringGeometry",{args:t||[0,.5,64]}):"ring"===s?G.createElement("ringGeometry",{args:t||[.25,.5,64]}):"rect"===s||"plane"===s?G.createElement("planeGeometry",{args:t||[1,1]}):"box"===s?G.createElement("boxGeometry",{args:t||[1,1,1]}):G.createElement(s,{args:t}),c||G.createElement("meshBasicMaterial",{toneMapped:a,map:r,side:O.DoubleSide}),e&&G.createElement("pointLight",(0,U.default)({castShadow:!0},e)))});var H=e.i(30297),z=e.i(8560),k=e.i(15080);function j(e,t,r){t.traverse(t=>{t.material&&(e.properties.remove(t.material),null==t.material.dispose||t.material.dispose())}),e.info.programs.length=0,e.compile(t,r)}function Q({focus:e=0,samples:t=10,size:r=25}){let a=(0,k.useThree)(e=>e.gl),i=(0,k.useThree)(e=>e.scene),s=(0,k.useThree)(e=>e.camera);return G.useEffect(()=>{let n=z.ShaderChunk.shadowmap_pars_fragment;return z.ShaderChunk.shadowmap_pars_fragment=z.ShaderChunk.shadowmap_pars_fragment.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+(({focus:e=0,size:t=25,samples:r=10}={})=>`
|
|
2
|
+
#define PENUMBRA_FILTER_SIZE float(${t})
|
|
3
|
+
#define RGB_NOISE_FUNCTION(uv) (randRGB(uv))
|
|
4
|
+
vec3 randRGB(vec2 uv) {
|
|
5
|
+
return vec3(
|
|
6
|
+
fract(sin(dot(uv, vec2(12.75613, 38.12123))) * 13234.76575),
|
|
7
|
+
fract(sin(dot(uv, vec2(19.45531, 58.46547))) * 43678.23431),
|
|
8
|
+
fract(sin(dot(uv, vec2(23.67817, 78.23121))) * 93567.23423)
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
vec3 lowPassRandRGB(vec2 uv) {
|
|
13
|
+
// 3x3 convolution (average)
|
|
14
|
+
// can be implemented as separable with an extra buffer for a total of 6 samples instead of 9
|
|
15
|
+
vec3 result = vec3(0);
|
|
16
|
+
result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, -1.0));
|
|
17
|
+
result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, 0.0));
|
|
18
|
+
result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, +1.0));
|
|
19
|
+
result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, -1.0));
|
|
20
|
+
result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, 0.0));
|
|
21
|
+
result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, +1.0));
|
|
22
|
+
result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, -1.0));
|
|
23
|
+
result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, 0.0));
|
|
24
|
+
result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, +1.0));
|
|
25
|
+
result *= 0.111111111; // 1.0 / 9.0
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
vec3 highPassRandRGB(vec2 uv) {
|
|
29
|
+
// by subtracting the low-pass signal from the original signal, we're being left with the high-pass signal
|
|
30
|
+
// hp(x) = x - lp(x)
|
|
31
|
+
return RGB_NOISE_FUNCTION(uv) - lowPassRandRGB(uv) + 0.5;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) {
|
|
36
|
+
const float goldenAngle = 2.399963f; // radians
|
|
37
|
+
float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount));
|
|
38
|
+
float theta = float(sampleIndex) * goldenAngle + angle;
|
|
39
|
+
float sine = sin(theta);
|
|
40
|
+
float cosine = cos(theta);
|
|
41
|
+
return vec2(cosine, sine) * r;
|
|
42
|
+
}
|
|
43
|
+
float penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation
|
|
44
|
+
return (zReceiver - zBlocker) / zBlocker;
|
|
45
|
+
}
|
|
46
|
+
float findBlocker(sampler2D shadowMap, vec2 uv, float compare, float angle) {
|
|
47
|
+
float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);
|
|
48
|
+
float blockerDepthSum = float(${e});
|
|
49
|
+
float blockers = 0.0;
|
|
50
|
+
|
|
51
|
+
int j = 0;
|
|
52
|
+
vec2 offset = vec2(0.);
|
|
53
|
+
float depth = 0.;
|
|
54
|
+
|
|
55
|
+
#pragma unroll_loop_start
|
|
56
|
+
for(int i = 0; i < ${r}; i ++) {
|
|
57
|
+
offset = (vogelDiskSample(j, ${r}, angle) * texelSize) * 2.0 * PENUMBRA_FILTER_SIZE;
|
|
58
|
+
depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset));
|
|
59
|
+
if (depth < compare) {
|
|
60
|
+
blockerDepthSum += depth;
|
|
61
|
+
blockers++;
|
|
62
|
+
}
|
|
63
|
+
j++;
|
|
64
|
+
}
|
|
65
|
+
#pragma unroll_loop_end
|
|
66
|
+
|
|
67
|
+
if (blockers > 0.0) {
|
|
68
|
+
return blockerDepthSum / blockers;
|
|
69
|
+
}
|
|
70
|
+
return -1.0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
float vogelFilter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius, float angle) {
|
|
75
|
+
float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);
|
|
76
|
+
float shadow = 0.0f;
|
|
77
|
+
int j = 0;
|
|
78
|
+
vec2 vogelSample = vec2(0.0);
|
|
79
|
+
vec2 offset = vec2(0.0);
|
|
80
|
+
#pragma unroll_loop_start
|
|
81
|
+
for (int i = 0; i < ${r}; i++) {
|
|
82
|
+
vogelSample = vogelDiskSample(j, ${r}, angle) * texelSize;
|
|
83
|
+
offset = vogelSample * (1.0 + filterRadius * float(${t}));
|
|
84
|
+
shadow += step( zReceiver, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) );
|
|
85
|
+
j++;
|
|
86
|
+
}
|
|
87
|
+
#pragma unroll_loop_end
|
|
88
|
+
return shadow * 1.0 / ${r}.0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
float PCSS (sampler2D shadowMap, vec4 coords) {
|
|
92
|
+
vec2 uv = coords.xy;
|
|
93
|
+
float zReceiver = coords.z; // Assumed to be eye-space z in this code
|
|
94
|
+
float angle = highPassRandRGB(gl_FragCoord.xy).r * PI2;
|
|
95
|
+
float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver, angle);
|
|
96
|
+
if (avgBlockerDepth == -1.0) {
|
|
97
|
+
return 1.0;
|
|
98
|
+
}
|
|
99
|
+
float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);
|
|
100
|
+
return vogelFilter(shadowMap, uv, zReceiver, 1.25 * penumbraRatio, angle);
|
|
101
|
+
}`)({size:r,samples:t,focus:e})).replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),j(a,i,s),()=>{z.ShaderChunk.shadowmap_pars_fragment=n,j(a,i,s)}},[e,r,t]),null}var V=G,W=e.i(84397),Y=e.i(18143),K=e.i(1605);function X(e){let t=e>>>0;return()=>{t|=0;let e=Math.imul((t=t+0x6d2b79f5|0)^t>>>15,1|t);return(((e=e+Math.imul(e^e>>>7,61|e)^e)^e>>>14)>>>0)/0x100000000}}function Z(e){let t=document.createElement("canvas");return t.width=t.height=e,[t,t.getContext("2d")]}function J(e,t,r){let a=new O.CanvasTexture(e);return a.wrapS=a.wrapT=O.RepeatWrapping,a.repeat.set(r[0],r[1]),a.anisotropy=8,t&&(a.colorSpace=O.SRGBColorSpace),a}function q(e,t){let r=e.width,a=e.getContext("2d").getImageData(0,0,r,r),[i,s]=Z(r),n=s.createImageData(r,r),o=(e,t)=>a.data[((t+r)%r*r+(e+r)%r)*4]/255;for(let e=0;e<r;e++)for(let a=0;a<r;a++){let i=(o(a+1,e)-o(a-1,e))*t,s=(o(a,e+1)-o(a,e-1))*t,l=1/Math.hypot(i,s,1),c=(e*r+a)*4;n.data[c]=(-i*l*.5+.5)*255,n.data[c+1]=(s*l*.5+.5)*255,n.data[c+2]=(.5*l+.5)*255,n.data[c+3]=255}return s.putImageData(n,0,0),i}function _(e,t,r){let a=X(4242),[i,s]=Z(512),[n,o]=Z(512),[l,c]=Z(512);s.fillStyle=e,s.fillRect(0,0,512,512),c.fillStyle="#808080",c.fillRect(0,0,512,512);for(let e=0;e<26e3;e++){let e=512*a(),r=512*a(),i=.05+.16*a();s.fillStyle=a()>.55?`rgba(255,255,255,${.55*i})`:t.replace("ALPHA",i.toFixed(3)),s.fillRect(e,r,1.4,1.4);let n=110+60*a();c.fillStyle=`rgba(${n},${n},${n},0.5)`,c.fillRect(e,r,1.6,1.6)}s.strokeStyle="rgba(0,0,0,0.10)",s.lineWidth=1.4;for(let e=0;e<=2;e++)s.beginPath(),s.moveTo(512*e/2,0),s.lineTo(512*e/2,512),s.stroke(),s.beginPath(),s.moveTo(0,512*e/2),s.lineTo(512,512*e/2),s.stroke();return o.fillStyle="#e8e8e8",o.fillRect(0,0,512,512),{map:J(i,!0,r),roughnessMap:J(n,!1,r),normalMap:J(q(l,.9),!1,r)}}function $(e,t,r){let a=X(4177),[i,s]=Z(512),[n,o]=Z(512),[l,c]=Z(512);s.fillStyle=t,s.fillRect(0,0,512,512),c.fillStyle="#4a4a4a",c.fillRect(0,0,512,512),o.fillStyle="#efefef",o.fillRect(0,0,512,512);let u=512/6,f=new O.Color(e);for(let e=0;e<16;e++){let t=e%2==0?0:u/2;for(let r=-1;r<7;r++){let i=r*u+t,n=32*e,o=(a()-.5)*.14-.16*(a()>.88),l=f.clone().offsetHSL((a()-.5)*.012,(a()-.5)*.05,o);s.fillStyle=`#${l.getHexString()}`,s.fillRect(i+1.5,n+1.5,u-3,29);let d=168+40*a();c.fillStyle=`rgb(${d},${d},${d})`,c.fillRect(i+1.5,n+1.5,u-3,29);for(let e=0;e<14;e++)s.fillStyle=a()>.5?"rgba(0,0,0,0.05)":"rgba(255,255,255,0.04)",s.fillRect(i+1.5+a()*(u-3),n+1.5+29*a(),1.6,1.6)}}return{map:J(i,!0,r),roughnessMap:J(n,!1,r),normalMap:J(q(l,.9),!1,r)}}function ee(e){let t=X(e),[r,a]=Z(256),i=[["#f4ede2","#d96f4e","#31435e","#e6b64c"],["#eef0ee","#5c8265","#233329","#c9a86a"],["#f0eae4","#8a5a83","#2e2440","#d8875f"],["#e9eef4","#3f6f94","#1d2c3c","#d0b25e"]],s=i[e%i.length];a.fillStyle=s[0],a.fillRect(0,0,256,256);for(let e=1;e<s.length;e++)for(let r=0;r<2;r++){a.fillStyle=s[e],a.globalAlpha=.85;let r=256*t(),i=256*t(),n=24+70*t();a.beginPath(),t()>.5?a.arc(r,i,n,0,2*Math.PI):a.rect(r-n/2,i-n,n*(.6+t()),1.6*n),a.fill()}a.globalAlpha=1;let n=new O.CanvasTexture(r);return n.colorSpace=O.SRGBColorSpace,n}let et=W.WALL_H-.3;function er(e,t){return(0,G.useMemo)(e,t)}function ea({plan:e,theme:t}){let r=(0,G.useMemo)(()=>(function(e){let t=document.createElement("canvas");t.width=1024,t.height=168;let r=t.getContext("2d");for(let[t,a]of(r.clearRect(0,0,1024,168),r.font="800 116px ui-sans-serif, system-ui, sans-serif",r.textAlign="center",r.textBaseline="middle",r.letterSpacing="16px","dark"===e?[[24,"#ff2440"],[11,"#ff5468"],[4,"#ffe6ea"]]:[[14,"#c8102a"],[5,"#e01b32"],[0,"#f0384c"]]))r.shadowColor="dark"===e?"#ff2440":"#8e0a1c",r.shadowBlur=t,r.fillStyle=a,r.fillText("CLAWCRIB",512,84);let a=new O.CanvasTexture(t);return a.colorSpace=O.SRGBColorSpace,a.anisotropy=8,a})(t),[t]),a=e.board,i=a.yCenter+a.h/2+.15,s=Math.min(1.3,(5.15-i)*.78),n=s/.1640625,o=.62*a.w;n>o&&(s=.1640625*(n=o));let l=-e.halfW+.07,c="dark"===t;return(0,I.jsxs)("group",{position:[l,(i+5.15)/2,a.z],rotation:[0,Math.PI/2,0],children:[[-1,1].map(e=>(0,I.jsxs)("mesh",{position:[e*n*.42,0,-.045],rotation:[Math.PI/2,0,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.02,.02,.09,8]}),(0,I.jsx)("meshStandardMaterial",{color:"#2a2d34",roughness:.5,metalness:.6})]},e)),(0,I.jsxs)("mesh",{children:[(0,I.jsx)("planeGeometry",{args:[n,s]}),(0,I.jsx)("meshStandardMaterial",{map:r,transparent:!0,emissive:c?"#ff2440":"#c8102a",emissiveMap:r,emissiveIntensity:c?1.15:.3,toneMapped:!1,roughness:.4,depthWrite:!1})]}),(0,I.jsx)("pointLight",{position:[0,0,.5],intensity:c?3.2:.9,distance:6,decay:2,color:"#ff4a5e"})]})}function ei({set:e}){return(0,I.jsx)("meshStandardMaterial",{map:e.map,roughnessMap:e.roughnessMap,normalMap:e.normalMap,normalScale:new O.Vector2(.6,.6),roughness:.95})}function es({plan:e,t3:t}){let{W:r,halfW:a,backZ:i}=e,s=i-W.WALL_T/2,n=r-1.8,o=Math.max(4,Math.round(n/1.6)),l=n/o,c=(0,G.useMemo)(()=>{let e=[];for(let t=0;t<=o;t++)e.push(-a+.9+t*l);return e},[a,o,l]),u=(0,G.useMemo)(()=>$(t.brick,t.mortar,[r/2.6,.75/2.6]),[t.brick,t.mortar,r]),f=(0,G.useMemo)(()=>$(t.brick,t.mortar,[r/2.6,(W.WALL_H-5.45)/2.6]),[t.brick,t.mortar,r]),d=(0,G.useMemo)(()=>$(t.brick,t.mortar,[.9/2.6,4.7/2.6]),[t.brick,t.mortar]),h=[.77,1.925,3.1,.75+14.100000000000001/4,5.430000000000001];return(0,I.jsxs)("group",{children:[(0,I.jsxs)("mesh",{position:[0,.375,s],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r+W.WALL_T,.75,W.WALL_T]}),(0,I.jsx)(ei,{set:u})]}),(0,I.jsxs)("mesh",{position:[0,(5.45+W.WALL_H)/2,s],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r+W.WALL_T,W.WALL_H-5.45,W.WALL_T]}),(0,I.jsx)(ei,{set:f})]}),[-1,1].map(e=>(0,I.jsxs)("mesh",{position:[e*(a-.45),3.1,s],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.9,4.7,W.WALL_T]}),(0,I.jsx)(ei,{set:d})]},e)),(0,I.jsxs)("mesh",{position:[0,.765,s+.55*W.WALL_T],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r-1.8+.2,.06,.7*W.WALL_T]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.6})]}),c.map((e,r)=>(0,I.jsxs)("mesh",{position:[e,3.1,s],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[0===r||r===c.length-1?.1:.06,4.7,.6*W.WALL_T]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.45,metalness:.55})]},r)),h.map((e,r)=>(0,I.jsxs)("mesh",{position:[0,e,s],children:[(0,I.jsx)("boxGeometry",{args:[n,0===r||r===h.length-1?.07:.05,.6*W.WALL_T]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.45,metalness:.55})]},r)),(0,I.jsxs)("mesh",{position:[0,3.1,s],children:[(0,I.jsx)("planeGeometry",{args:[n,4.7]}),(0,I.jsx)("meshPhysicalMaterial",{color:"#cfe4f4",transparent:!0,opacity:t.glassOpacity,roughness:.05,metalness:0,side:O.DoubleSide,depthWrite:!1})]})]})}function en({plan:e,t3:t}){let{D:r,halfW:a,halfD:i}=e,s=-a-W.WALL_T/2,n=r+W.WALL_T,o=n-1.8,l=Math.max(4,Math.round(o/1.15)),c=o/l,u=(0,G.useMemo)(()=>{let e=[];for(let t=0;t<=l;t++)e.push(-n/2+.9+t*c);return e},[l,c,n]),f=(0,G.useMemo)(()=>$(t.brick,t.mortar,[r/2.6,5.15/2.6]),[t.brick,t.mortar,r]),d=(0,G.useMemo)(()=>$(t.brick,t.mortar,[r/2.6,(W.WALL_H-6.45)/2.6]),[t.brick,t.mortar,r]),h=(0,G.useMemo)(()=>$(t.brick,t.mortar,[.9/2.6,.5]),[t.brick,t.mortar]),p=[5.17,5.15+1.3/3,5.15+2.6/3,6.430000000000001];return(0,I.jsxs)("group",{children:[(0,I.jsxs)("mesh",{position:[s,2.575,0],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[W.WALL_T,5.15,n]}),(0,I.jsx)(ei,{set:f})]}),(0,I.jsxs)("mesh",{position:[s,(6.45+W.WALL_H)/2,0],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[W.WALL_T,W.WALL_H-6.45,n]}),(0,I.jsx)(ei,{set:d})]}),[-1,1].map(e=>(0,I.jsxs)("mesh",{position:[s,5.15+.65,e*(i+W.WALL_T/2-.45)],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[W.WALL_T,1.3,.9]}),(0,I.jsx)(ei,{set:h})]},e)),(0,I.jsxs)("mesh",{position:[-a+.05*W.WALL_T,5.165,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.7*W.WALL_T,.06,o+.2]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.6})]}),u.map((e,r)=>(0,I.jsxs)("mesh",{position:[s,5.15+.65,e],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.6*W.WALL_T,1.3,0===r||r===u.length-1?.16:.11]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.45,metalness:.55})]},r)),p.map((e,r)=>(0,I.jsxs)("mesh",{position:[s,e,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.6*W.WALL_T,0===r||r===p.length-1?.07:.05,o]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.45,metalness:.55})]},r)),(0,I.jsxs)("mesh",{position:[s,5.15+.65,0],rotation:[0,Math.PI/2,0],children:[(0,I.jsx)("planeGeometry",{args:[o,1.3]}),(0,I.jsx)("meshPhysicalMaterial",{color:"#cfe4f4",transparent:!0,opacity:t.glassOpacity,roughness:.05,metalness:0,side:O.DoubleSide,depthWrite:!1})]})]})}function eo({plan:e,t3:t,theme:r}){let{W:a,D:i,halfW:s,halfD:n,backZ:o}=e,l=er(()=>(function(e){let t=X(1337),[r,a]=Z(1024),[i,s]=Z(1024),[n,o]=Z(1024);o.fillStyle="#808080",o.fillRect(0,0,1024,1024);for(let e=0;e<8;e++){let r=2+Math.floor(2*t()),i=-(300*t()),s=128*e;for(;i<1024;){let e=1024/r+(t()-.5)*160,n=.86+.22*t(),l=.95+.1*t(),c=Math.min(255,176*n*l),u=Math.min(255,138*n),f=Math.min(255,96*n*(2-l));a.fillStyle=`rgb(${0|c},${0|u},${0|f})`,a.fillRect(i,s,e,128);for(let r=0;r<26;r++){let r=s+128*t(),n=.05+.09*t();a.strokeStyle=t()>.4?`rgba(96,62,34,${n})`:`rgba(255,230,190,${.8*n})`,a.lineWidth=.6+1.6*t(),a.beginPath(),a.moveTo(i,r);for(let s=0;s<=e;s+=32)a.lineTo(i+s,r+2.2*Math.sin(.02*s+6*t()));a.stroke()}if(t()>.72){let r=i+e*(.2+.6*t()),n=s+128*(.25+.5*t()),o=3+6*t(),l=a.createRadialGradient(r,n,.5,r,n,o);l.addColorStop(0,"rgba(70,44,22,0.85)"),l.addColorStop(.6,"rgba(96,62,34,0.4)"),l.addColorStop(1,"rgba(96,62,34,0)"),a.fillStyle=l,a.beginPath(),a.arc(r,n,o,0,2*Math.PI),a.fill()}a.fillStyle="rgba(40,24,12,0.55)",a.fillRect(i+e-1.5,s,3,128),o.fillStyle="#565656",o.fillRect(i+e-2,s,4,128),i+=e}a.fillStyle="rgba(40,24,12,0.6)",a.fillRect(0,s+128-1.5,1024,3),o.fillStyle="#4a4a4a",o.fillRect(0,s+128-2,1024,4)}s.fillStyle="#8f8f8f",s.fillRect(0,0,1024,1024);for(let e=0;e<2400;e++){let e=120+80*t();s.fillStyle=`rgba(${e},${e},${e},0.25)`,s.fillRect(1024*t(),1024*t(),40+120*t(),1.5)}return{map:J(r,!0,e),roughnessMap:J(i,!1,e),normalMap:J(q(n,2.2),!1,e)}})([a/5,i/1.5]),[a,i]),c=er(()=>_(t.rugLounge,t.rugLoungeFleck,[e.lounge.w/1.2,e.lounge.d/1.2]),[t.rugLounge,t.rugLoungeFleck,e.lounge.w,e.lounge.d]),u=er(()=>_(t.rugBullpen,t.rugBullpenFleck,[e.bullpen.w/1.2,e.bullpen.d/1.2]),[t.rugBullpen,t.rugBullpenFleck,e.bullpen.w,e.bullpen.d]),f=(0,G.useMemo)(()=>(function(e){let t=document.createElement("canvas");t.width=2048,t.height=512;let r=t.getContext("2d"),a=X(2024),i=r.createLinearGradient(0,0,0,512);if("light"===e?(i.addColorStop(0,"#7fb2e8"),i.addColorStop(.55,"#bcd8f2"),i.addColorStop(.82,"#e8f1f8"),i.addColorStop(1,"#f2ece2")):(i.addColorStop(0,"#060a18"),i.addColorStop(.55,"#0c1430"),i.addColorStop(.85,"#1b2547"),i.addColorStop(1,"#2c3157")),r.fillStyle=i,r.fillRect(0,0,2048,512),"light"===e)for(let e=0;e<42;e++){let e=2048*a(),t=512*(.15+.45*a()),i=30+90*a(),s=r.createRadialGradient(e,t,0,e,t,i);s.addColorStop(0,"rgba(255,255,255,0.5)"),s.addColorStop(1,"rgba(255,255,255,0)"),r.fillStyle=s,r.fillRect(e-i,t-i,2*i,2*i)}else{for(let e=0;e<320;e++){let e=.25+.75*a();r.fillStyle=`rgba(255,255,255,${e})`,r.fillRect(2048*a(),512*a()*.6,a()>.9?2:1,a()>.9?2:1)}let e=r.createRadialGradient(1474.56,102.4,2,1474.56,102.4,46);e.addColorStop(0,"rgba(240,244,255,0.95)"),e.addColorStop(.25,"rgba(220,230,255,0.5)"),e.addColorStop(1,"rgba(220,230,255,0)"),r.fillStyle=e,r.fillRect(1424.56,102.4-50,100,100)}let s="light"===e?"rgba(112,132,158,0.75)":"rgba(10,14,26,0.95)",n="light"===e?"rgba(255,255,255,0.25)":"rgba(255,214,140,0.85)",o=0;for(;o<2048;){let t=34+90*a(),i=512*(.12+.26*a());r.fillStyle=s,r.fillRect(o,512-i,t,i);for(let s=512-i+6;s<504;s+=11)for(let i=o+5;i<o+t-6;i+=10)a()>("light"===e?.86:.62)&&(r.fillStyle=n,r.fillRect(i,s,4,5));o+=t+6+26*a()}let l=new O.CanvasTexture(t);return l.colorSpace=O.SRGBColorSpace,l.anisotropy=4,l.wrapS=O.RepeatWrapping,l})(r),[r]),d=(0,G.useMemo)(()=>[ee(3),ee(7)],[]),h=Math.max(s,n)+22;return(0,I.jsxs)("group",{children:[(0,I.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],receiveShadow:!0,children:[(0,I.jsx)("planeGeometry",{args:[a,i]}),(0,I.jsx)("meshStandardMaterial",{map:l.map,roughnessMap:l.roughnessMap,normalMap:l.normalMap,normalScale:new O.Vector2(.7,.7),roughness:t.floorRough,metalness:.02})]}),(0,I.jsxs)("mesh",{position:[0,-.315,0],children:[(0,I.jsx)("boxGeometry",{args:[a+.5,.6,i+.5]}),(0,I.jsx)("meshStandardMaterial",{color:t.baseColor,roughness:.95})]}),(0,I.jsx)(es,{plan:e,t3:t}),(0,I.jsx)(en,{plan:e,t3:t}),(0,I.jsx)(el,{plan:e,t3:t}),(0,I.jsxs)("mesh",{position:[0,.07,o+.035],children:[(0,I.jsx)("boxGeometry",{args:[a,.14,.07]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.6})]}),(0,I.jsxs)("mesh",{position:[-s+.035,.07,0],children:[(0,I.jsx)("boxGeometry",{args:[.07,.14,i]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.6})]}),[[s-.16,o+.16],[s-.16,n-.16],[-s+.16,n-.16]].map(([e,r],a)=>(0,I.jsxs)("mesh",{position:[e,W.WALL_H/2,r],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.3,W.WALL_H,.3]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.45,metalness:.55})]},a)),(0,I.jsx)(ea,{plan:e,theme:r}),[o+1.6,n-1.6].map((e,t)=>(0,I.jsxs)("group",{position:[-s+.05,1.75,e],rotation:[0,Math.PI/2,0],children:[(0,I.jsxs)("mesh",{castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[1.05,1.35,.05]}),(0,I.jsx)("meshStandardMaterial",{color:"#20242c",roughness:.4})]}),(0,I.jsxs)("mesh",{position:[0,0,.03],children:[(0,I.jsx)("planeGeometry",{args:[.92,1.22]}),(0,I.jsx)("meshStandardMaterial",{map:d[t],roughness:.8})]})]},t)),(0,I.jsxs)("mesh",{position:[e.lounge.x,.012,e.lounge.z],rotation:[-Math.PI/2,0,0],receiveShadow:!0,children:[(0,I.jsx)("planeGeometry",{args:[e.lounge.w-.5,e.lounge.d-.4]}),(0,I.jsx)("meshStandardMaterial",{map:c.map,roughnessMap:c.roughnessMap,normalMap:c.normalMap,roughness:1})]}),(0,I.jsxs)("mesh",{position:[e.bullpen.x,.012,e.bullpen.z],rotation:[-Math.PI/2,0,0],receiveShadow:!0,children:[(0,I.jsx)("planeGeometry",{args:[e.bullpen.w-.4,e.bullpen.d+.6]}),(0,I.jsx)("meshStandardMaterial",{map:u.map,roughnessMap:u.roughnessMap,normalMap:u.normalMap,roughness:1})]}),e.plants.map((e,t)=>(0,I.jsx)(ec,{position:[e.x,0,e.z],scale:e.s,seed:t},t)),(0,I.jsx)(eu,{plan:e,t3:t}),(0,I.jsxs)("mesh",{position:[0,7,0],children:[(0,I.jsx)("cylinderGeometry",{args:[h,h,32,48,1,!0]}),(0,I.jsx)("meshBasicMaterial",{map:f,side:O.BackSide,fog:!1,toneMapped:!1})]})]})}function el({plan:e,t3:t}){let{W:r,D:a,halfW:i,backZ:s}=e,n=(0,G.useMemo)(()=>{let e=[],t=Math.max(3,Math.round(a/5.2));for(let r=0;r<t;r++)e.push(s+(r+.5)*a/t);return e},[a,s]),o=(0,G.useMemo)(()=>n.map(e=>e),[n]);return(0,I.jsxs)("group",{children:[n.map((e,a)=>(0,I.jsxs)("group",{position:[0,et,e],children:[(0,I.jsxs)("mesh",{castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r,.22,.07]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.5,metalness:.5})]}),[-.11,.11].map(e=>(0,I.jsxs)("mesh",{position:[0,e,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r,.04,.18]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.5,metalness:.5})]},e))]},a)),(0,I.jsxs)("mesh",{position:[0,et-.26,s+a/2],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.22,.22,.98*a]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.5,metalness:.5})]}),(0,I.jsxs)("group",{position:[-i+.3*r,et-.55,s+a/2],children:[(0,I.jsxs)("mesh",{rotation:[Math.PI/2,0,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.24,.24,.94*a,18]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.35,metalness:.7})]}),n.map((e,r)=>(0,I.jsxs)("mesh",{position:[0,0,e-(s+a/2)],rotation:[Math.PI/2,0,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.26,.26,.1,18]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.3,metalness:.75})]},r)),o.map((e,r)=>(0,I.jsxs)("mesh",{position:[0,.4,e-(s+a/2)],children:[(0,I.jsx)("cylinderGeometry",{args:[.015,.015,.55,6]}),(0,I.jsx)("meshStandardMaterial",{color:t.steel,roughness:.5,metalness:.5})]},`h${r}`))]}),(0,I.jsxs)("mesh",{position:[i-.22*r,et-.35,s+a/2],rotation:[Math.PI/2,0,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.035,.035,.92*a,8]}),(0,I.jsx)("meshStandardMaterial",{color:"#8a3b34",roughness:.6,metalness:.3})]})]})}function ec({position:e,scale:t=1,seed:r=0}){let a=(0,G.useMemo)(()=>{let e=[],t=["#3e7d4f","#4f945f","#356b44","#46875a","#57a06b"];for(let a=0;a<7;a++){let i=2.4*a+r;e.push({p:[.17*Math.sin(i),.95+.13*a+.05*Math.sin(3*i),.17*Math.cos(i)],r:.3-.02*a,c:t[(a+r)%t.length]})}return e},[r]);return(0,I.jsxs)("group",{position:e,scale:t,children:[(0,I.jsxs)("mesh",{position:[0,.26,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.21,.17,.52,20]}),(0,I.jsx)("meshStandardMaterial",{color:"#9c5a35",roughness:.75})]}),(0,I.jsxs)("mesh",{position:[0,.5,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.225,.21,.06,20]}),(0,I.jsx)("meshStandardMaterial",{color:"#8a4d2c",roughness:.75})]}),(0,I.jsxs)("mesh",{position:[0,.51,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.18,.18,.03,16]}),(0,I.jsx)("meshStandardMaterial",{color:"#3c2a1c",roughness:1})]}),(0,I.jsxs)("mesh",{position:[0,.85,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.028,.045,.75,8]}),(0,I.jsx)("meshStandardMaterial",{color:"#6b4a2e",roughness:.9})]}),a.map((e,t)=>(0,I.jsxs)("mesh",{position:e.p,scale:[1,.78,1],castShadow:!0,children:[(0,I.jsx)("sphereGeometry",{args:[e.r,12,10]}),(0,I.jsx)("meshStandardMaterial",{color:e.c,roughness:.9})]},t))]})}function eu({plan:e,t3:t}){let r=(0,G.useMemo)(()=>{let t=[],r=Math.max(2,Math.round(e.bullpen.w/3.4));for(let a=0;a<r;a++)t.push(e.bullpen.x-e.bullpen.w/2+(a+.5)*e.bullpen.w/r);return t},[e.bullpen.x,e.bullpen.w]),a=e.rooms.find(e=>"__conference__"===e.id),i=[[e.lounge.x,e.lounge.z]];return a&&i.push([a.x,a.z]),(0,I.jsxs)("group",{children:[r.map((r,a)=>(0,I.jsxs)("group",{position:[r,3.35,e.bullpen.z],children:[(0,I.jsxs)("mesh",{castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.16,.06,.85*e.bullpen.d]}),(0,I.jsx)("meshStandardMaterial",{color:"#2a2d34",roughness:.5,metalness:.5})]}),(0,I.jsxs)("mesh",{position:[0,-.035,0],children:[(0,I.jsx)("boxGeometry",{args:[.1,.015,.82*e.bullpen.d]}),(0,I.jsx)("meshStandardMaterial",{color:"#fff6e6",emissive:"#fff1d6",emissiveIntensity:t.lampGlow,toneMapped:!1})]}),[-1,1].map(t=>(0,I.jsxs)("mesh",{position:[0,(et-3.35)/2,t*e.bullpen.d*.36],children:[(0,I.jsx)("cylinderGeometry",{args:[.006,.006,et-3.35,4]}),(0,I.jsx)("meshStandardMaterial",{color:"#3a3d44"})]},t))]},a)),i.map(([e,r],a)=>(0,I.jsxs)("group",{position:[e,0,r],children:[(0,I.jsxs)("mesh",{position:[0,(2.75+et)/2,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.008,.008,et-2.75,4]}),(0,I.jsx)("meshStandardMaterial",{color:"#2a2d34"})]}),(0,I.jsxs)("mesh",{position:[0,2.62,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.09,.3,.26,24,1,!0]}),(0,I.jsx)("meshStandardMaterial",{color:"#23262c",roughness:.35,metalness:.6,side:O.DoubleSide})]}),(0,I.jsxs)("mesh",{position:[0,2.56,0],children:[(0,I.jsx)("sphereGeometry",{args:[.07,12,12]}),(0,I.jsx)("meshStandardMaterial",{color:"#fff3da",emissive:"#ffdf9e",emissiveIntensity:t.lampGlow,toneMapped:!1})]}),t.lampLight>0?(0,I.jsx)("pointLight",{position:[0,2.45,0],intensity:t.lampLight,distance:8,decay:2,color:"#ffd9a0"}):null]},a))]})}var ef=e.i(71753),ed=e.i(60099);let eh=G.forwardRef(function({args:[e=1,t=1,r=1]=[],radius:a=.05,steps:i=1,smoothness:s=4,bevelSegments:n=4,creaseAngle:o=.4,children:l,...c},u){return G.createElement("mesh",(0,U.default)({ref:u},c),G.createElement(ep,{args:[e,t,r],radius:a,steps:i,smoothness:s,bevelSegments:n,creaseAngle:o}),l)}),ep=G.forwardRef(function({args:[e=1,t=1,r=1]=[],radius:a=.05,steps:i=1,smoothness:s=4,bevelSegments:n=4,creaseAngle:o=.4,...l},c){let u=G.useMemo(()=>{let r,i;return r=new O.Shape,i=a-1e-5,r.absarc(1e-5,1e-5,1e-5,-Math.PI/2,-Math.PI,!0),r.absarc(1e-5,t-2*i,1e-5,Math.PI,Math.PI/2,!0),r.absarc(e-2*i,t-2*i,1e-5,Math.PI/2,0,!0),r.absarc(e-2*i,1e-5,1e-5,0,-Math.PI/2,!0),r},[e,t,a]),f=G.useMemo(()=>({depth:r-2*a,bevelEnabled:!0,bevelSegments:2*n,steps:i,bevelSize:a-1e-5,bevelThickness:a,curveSegments:s}),[r,a,s,n,i]),d=G.useRef(null);return G.useLayoutEffect(()=>{d.current&&(d.current.center(),function(e,t=Math.PI/3){let r=Math.cos(t),a=(1+1e-10)*100,i=[new O.Vector3,new O.Vector3,new O.Vector3],s=new O.Vector3,n=new O.Vector3,o=new O.Vector3,l=new O.Vector3;function c(e){let t=~~(e.x*a),r=~~(e.y*a),i=~~(e.z*a);return`${t},${r},${i}`}let u=e.index?e.toNonIndexed():e,f=u.attributes.position,d={};for(let e=0,t=f.count/3;e<t;e++){let t=3*e,r=i[0].fromBufferAttribute(f,t+0),a=i[1].fromBufferAttribute(f,t+1),o=i[2].fromBufferAttribute(f,t+2);s.subVectors(o,a),n.subVectors(r,a);let l=new O.Vector3().crossVectors(s,n).normalize();for(let e=0;e<3;e++){let t=c(i[e]);t in d||(d[t]=[]),d[t].push(l)}}let h=new Float32Array(3*f.count),p=new O.BufferAttribute(h,3,!1);for(let e=0,t=f.count/3;e<t;e++){let t=3*e,a=i[0].fromBufferAttribute(f,t+0),u=i[1].fromBufferAttribute(f,t+1),h=i[2].fromBufferAttribute(f,t+2);s.subVectors(h,u),n.subVectors(a,u),o.crossVectors(s,n).normalize();for(let e=0;e<3;e++){let a=d[c(i[e])];l.set(0,0,0);for(let e=0,t=a.length;e<t;e++){let t=a[e];o.dot(t)>r&&l.add(t)}l.normalize(),p.setXYZ(t+e,l.x,l.y,l.z)}}u.setAttribute("normal",p)}(d.current,o))},[u,f,o]),G.useImperativeHandle(c,()=>d.current),G.createElement("extrudeGeometry",(0,U.default)({ref:d,args:[u,f]},l))});var em=e.i(54088),eg=e.i(5999);function ev(e){switch(e){case"tool":return 1;case"thinking":case"cron":return .65;case"error":return .8;default:return .03}}let ex="#23262e",eA="#3a3f48";function eD({color:e,status:t,position:r,rotationY:a=0,ghost:i=!1}){let s=(0,G.useRef)(null),n=(0,G.useMemo)(()=>(0,em.phaseFor)(e+a),[e,a]);(0,ef.useFrame)(()=>{let e=(0,em.nowSeconds)(),r=ev(t),a="tool"===t?.85+.3*Math.sin(6*e+n):1;s.current&&(s.current.emissiveIntensity=.25+r*a)});let o="idle"===t||"offline"===t?e??eg.STATUS_META[t].color:eg.STATUS_META[t].color,l=i?.3:1;return(0,I.jsxs)("group",{position:r,rotation:[0,a,0],children:[(0,I.jsx)(eh,{args:[1.4,.055,.75],radius:.022,position:[0,.735,0],castShadow:!0,receiveShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{color:"#cdaa7c",roughness:.42,transparent:i,opacity:l})}),[-.6,.6].map(e=>(0,I.jsxs)("group",{position:[e,0,0],children:[[-.29,.29].map(e=>(0,I.jsxs)("mesh",{position:[0,.36,e],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.05,.72,.045]}),(0,I.jsx)("meshStandardMaterial",{color:ex,roughness:.45,metalness:.55,transparent:i,opacity:l})]},e)),(0,I.jsxs)("mesh",{position:[0,.025,0],children:[(0,I.jsx)("boxGeometry",{args:[.06,.05,.72]}),(0,I.jsx)("meshStandardMaterial",{color:ex,roughness:.45,metalness:.55,transparent:i,opacity:l})]})]},e)),(0,I.jsxs)("mesh",{position:[0,.45,-.32],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[1.18,.4,.02]}),(0,I.jsx)("meshStandardMaterial",{color:eA,roughness:.6,metalness:.3,transparent:i,opacity:.9*l})]}),i?null:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)("group",{position:[0,.762,-.22],children:[(0,I.jsxs)("mesh",{position:[0,.09,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.09,.11,.018,16]}),(0,I.jsx)("meshStandardMaterial",{color:ex,roughness:.4,metalness:.5})]}),(0,I.jsxs)("mesh",{position:[0,.17,-.02],children:[(0,I.jsx)("boxGeometry",{args:[.045,.22,.03]}),(0,I.jsx)("meshStandardMaterial",{color:ex,roughness:.4,metalness:.5})]}),(0,I.jsxs)("mesh",{position:[0,.33,.01],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.62,.37,.028]}),(0,I.jsx)("meshStandardMaterial",{color:"#14171d",roughness:.35})]}),(0,I.jsxs)("mesh",{position:[0,.33,.026],children:[(0,I.jsx)("planeGeometry",{args:[.575,.325]}),(0,I.jsx)("meshStandardMaterial",{ref:s,color:"#0e1116",emissive:o,emissiveIntensity:.25+ev(t),roughness:.25})]})]}),(0,I.jsxs)("mesh",{position:[.02,.772,.12],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.4,.016,.14]}),(0,I.jsx)("meshStandardMaterial",{color:"#2c313b",roughness:.55})]}),(0,I.jsxs)("mesh",{position:[.34,.772,.13],castShadow:!0,children:[(0,I.jsx)("sphereGeometry",{args:[.032,10,8]}),(0,I.jsx)("meshStandardMaterial",{color:"#31363f",roughness:.5})]}),(0,I.jsxs)("group",{position:[-.48,.762,.08],children:[(0,I.jsxs)("mesh",{position:[0,.045,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.035,.03,.09,14]}),(0,I.jsx)("meshStandardMaterial",{color:e,roughness:.35})]}),(0,I.jsxs)("mesh",{position:[.042,.05,0],rotation:[Math.PI/2,0,0],children:[(0,I.jsx)("torusGeometry",{args:[.022,.007,6,12]}),(0,I.jsx)("meshStandardMaterial",{color:e,roughness:.35})]})]}),(0,I.jsxs)("mesh",{position:[.5,.766,-.14],rotation:[0,.3,0],children:[(0,I.jsx)("boxGeometry",{args:[.21,.008,.29]}),(0,I.jsx)("meshStandardMaterial",{color:"#e8e9ec",roughness:.9})]})]})]})}function ew({position:e,rotationY:t=0,scale:r=1}){return(0,I.jsxs)("group",{position:e,rotation:[0,t,0],scale:r,children:[[0,1,2,3,4].map(e=>{let t=e/5*Math.PI*2;return(0,I.jsxs)("group",{rotation:[0,t,0],children:[(0,I.jsxs)("mesh",{position:[0,.045,.14],rotation:[.12,0,0],children:[(0,I.jsx)("boxGeometry",{args:[.035,.03,.3]}),(0,I.jsx)("meshStandardMaterial",{color:eA,roughness:.35,metalness:.7})]}),(0,I.jsxs)("mesh",{position:[0,.028,.27],children:[(0,I.jsx)("sphereGeometry",{args:[.028,8,8]}),(0,I.jsx)("meshStandardMaterial",{color:"#191c22",roughness:.4})]})]},e)}),(0,I.jsxs)("mesh",{position:[0,.22,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.024,.032,.32,10]}),(0,I.jsx)("meshStandardMaterial",{color:eA,roughness:.3,metalness:.8})]}),(0,I.jsx)(eh,{args:[.46,.075,.44],radius:.03,position:[0,.43,0],castShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{color:"#262a33",roughness:.75})}),(0,I.jsx)(eh,{args:[.44,.56,.06],radius:.028,position:[0,.76,.2],rotation:[-.08,0,0],castShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{color:"#2c313b",roughness:.75})}),[-1,1].map(e=>(0,I.jsxs)("group",{position:[.235*e,0,0],children:[(0,I.jsxs)("mesh",{position:[0,.51,.05],children:[(0,I.jsx)("boxGeometry",{args:[.025,.16,.03]}),(0,I.jsx)("meshStandardMaterial",{color:ex,roughness:.4,metalness:.5})]}),(0,I.jsxs)("mesh",{position:[0,.595,.02],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.05,.022,.2]}),(0,I.jsx)("meshStandardMaterial",{color:"#1d2026",roughness:.6})]})]},e))]})}function eS({position:e,rotationY:t=0,fabric:r,color:a}){let i={map:r.map,roughnessMap:r.roughnessMap,normalMap:r.normalMap,color:a,roughness:1};return(0,I.jsxs)("group",{position:e,rotation:[0,t,0],children:[(0,I.jsx)(eh,{args:[1.34,.22,.66],radius:.04,position:[0,.2,0],castShadow:!0,receiveShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{...i})}),[-.31,.31].map(e=>(0,I.jsx)(eh,{args:[.58,.13,.56],radius:.05,position:[e,.36,.02],castShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{...i})},e)),[-.31,.31].map(e=>(0,I.jsx)(eh,{args:[.58,.42,.16],radius:.06,position:[e,.56,-.26],rotation:[-.12,0,0],castShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{...i})},e)),[-1,1].map(e=>(0,I.jsx)(eh,{args:[.16,.36,.62],radius:.05,position:[.67*e,.4,0],castShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{...i})},e)),[[-.58,-.24],[.58,-.24],[-.58,.24],[.58,.24]].map(([e,t],r)=>(0,I.jsxs)("mesh",{position:[e,.05,t],children:[(0,I.jsx)("cylinderGeometry",{args:[.025,.018,.1,8]}),(0,I.jsx)("meshStandardMaterial",{color:"#4a3524",roughness:.6})]},r))]})}function ey({position:e,glow:t,lit:r}){return(0,I.jsxs)("group",{position:e,children:[(0,I.jsxs)("mesh",{position:[0,.02,0],children:[(0,I.jsx)("cylinderGeometry",{args:[.16,.18,.04,16]}),(0,I.jsx)("meshStandardMaterial",{color:ex,roughness:.4,metalness:.5})]}),(0,I.jsxs)("mesh",{position:[0,.75,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.015,.015,1.5,8]}),(0,I.jsx)("meshStandardMaterial",{color:eA,roughness:.35,metalness:.7})]}),(0,I.jsxs)("mesh",{position:[0,1.62,0],castShadow:!0,children:[(0,I.jsx)("cylinderGeometry",{args:[.14,.19,.3,20,1,!0]}),(0,I.jsx)("meshStandardMaterial",{color:"#e8e2d4",roughness:.9,side:O.DoubleSide})]}),(0,I.jsxs)("mesh",{position:[0,1.58,0],children:[(0,I.jsx)("sphereGeometry",{args:[.06,10,10]}),(0,I.jsx)("meshStandardMaterial",{color:"#fff3da",emissive:"#ffdf9e",emissiveIntensity:t,toneMapped:!1})]}),r?(0,I.jsx)("pointLight",{position:[0,1.55,0],intensity:3,distance:5.5,decay:2,color:"#ffd9a0"}):null]})}function eT({x:e,z:t,w:r}){return(0,I.jsxs)("group",{position:[e,0,t],children:[(0,I.jsxs)("mesh",{position:[0,.44,0],castShadow:!0,receiveShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r,.88,.6]}),(0,I.jsx)("meshStandardMaterial",{color:"#3f444e",roughness:.55})]}),Array.from({length:Math.max(1,Math.round(r/.6))-1},(e,t)=>(0,I.jsxs)("mesh",{position:[-r/2+(t+1)*r/Math.max(1,Math.round(r/.6)),.42,.302],children:[(0,I.jsx)("boxGeometry",{args:[.012,.78,.004]}),(0,I.jsx)("meshStandardMaterial",{color:"#22252c"})]},t)),(0,I.jsxs)("mesh",{position:[0,.9,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[r+.06,.045,.66]}),(0,I.jsx)("meshStandardMaterial",{color:"#d8d5cd",roughness:.25})]}),(0,I.jsxs)("group",{position:[-(.28*r),.92,0],children:[(0,I.jsxs)("mesh",{position:[0,.16,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.26,.32,.3]}),(0,I.jsx)("meshStandardMaterial",{color:"#1d2026",roughness:.35,metalness:.3})]}),(0,I.jsxs)("mesh",{position:[0,.05,.12],children:[(0,I.jsx)("boxGeometry",{args:[.16,.1,.1]}),(0,I.jsx)("meshStandardMaterial",{color:"#31363f",roughness:.4})]})]}),[.05,.18].map((e,t)=>(0,I.jsxs)("mesh",{position:[.1*r+e,.955,.08],children:[(0,I.jsx)("cylinderGeometry",{args:[.028,.023,.06,10]}),(0,I.jsx)("meshStandardMaterial",{color:t?"#e8e4da":"#d96f4e",roughness:.35})]},t)),(0,I.jsxs)("mesh",{position:[.32*r,.945,0],children:[(0,I.jsx)("sphereGeometry",{args:[.09,14,8,0,2*Math.PI,0,Math.PI/2]}),(0,I.jsx)("meshStandardMaterial",{color:"#c9b48a",roughness:.5,side:O.DoubleSide})]})]})}function eC({room:e}){let t=Math.min(.52*e.w,3.4),r=Math.min(.42*e.d,1.5),a=Math.max(2,Math.floor(t/.85)),i=[];for(let e=0;e<a;e++){let s=-t/2+(e+.5)*t/a;i.push({x:s,z:r/2+.32,yaw:Math.PI}),i.push({x:s,z:-r/2-.32,yaw:0})}return(0,I.jsxs)("group",{position:[e.x,0,e.z],children:[(0,I.jsx)(eh,{args:[t,.06,r],radius:.03,position:[0,.74,0],castShadow:!0,receiveShadow:!0,children:(0,I.jsx)("meshStandardMaterial",{color:"#5b4632",roughness:.35})}),[-t/2+.3,t/2-.3].map(e=>(0,I.jsxs)("mesh",{position:[e,.36,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.08,.72,.7*r]}),(0,I.jsx)("meshStandardMaterial",{color:"#4a3826",roughness:.5})]},e)),i.map((e,t)=>(0,I.jsx)(ew,{position:[e.x,0,e.z],rotationY:e.yaw,scale:.92},t)),(0,I.jsxs)("group",{position:[0,0,-e.d/2+.4],children:[(0,I.jsxs)("mesh",{position:[0,.32,0],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[Math.min(.5*e.w,2.4),.64,.42]}),(0,I.jsx)("meshStandardMaterial",{color:"#3f444e",roughness:.55})]}),(0,I.jsxs)("mesh",{position:[0,1.55,-.1],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[1.7,.95,.06]}),(0,I.jsx)("meshStandardMaterial",{color:"#0d0f13",roughness:.3})]}),(0,I.jsxs)("mesh",{position:[0,1.55,-.065],children:[(0,I.jsx)("planeGeometry",{args:[1.6,.85]}),(0,I.jsx)("meshStandardMaterial",{color:"#101722",emissive:"#1d3350",emissiveIntensity:.7,roughness:.3})]})]})]})}function eB({room:e,t3:t}){let r=e.w/2,a=e.d/2,i=e.door?.side??(e.z<0?"S":"N"),s="N"===i||"S"===i?e.w:e.d,n=Math.min(e.door?.w??1.9,.6*s),o=(s-n)/2,l=n/2+o/2,c="S"===i?a:"N"===i?-a:0,u="E"===i?r:"W"===i?-r:0,f=(e,r,a)=>(0,I.jsxs)("group",{children:[(0,I.jsxs)("mesh",{position:e,children:[(0,I.jsx)("boxGeometry",{args:r}),(0,I.jsx)("meshPhysicalMaterial",{color:"#dcebf7",transparent:!0,opacity:t.glassOpacity,roughness:.05,metalness:0,side:O.DoubleSide,depthWrite:!1})]}),(0,I.jsxs)("mesh",{position:[e[0],2.47,e[2]],children:[(0,I.jsx)("boxGeometry",{args:[Math.max(r[0],.06),.06,Math.max(r[2],.06)]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.45,metalness:.5})]}),(0,I.jsxs)("mesh",{position:[e[0],.04,e[2]],children:[(0,I.jsx)("boxGeometry",{args:[Math.max(r[0],.06),.08,Math.max(r[2],.06)]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.45,metalness:.5})]})]},a);return(0,I.jsxs)("group",{children:[(0,I.jsxs)("mesh",{position:[e.x,.013,e.z],rotation:[-Math.PI/2,0,0],children:[(0,I.jsx)("planeGeometry",{args:[e.w,e.d]}),(0,I.jsx)("meshStandardMaterial",{color:e.color,transparent:!0,opacity:.13,roughness:1})]}),(0,I.jsxs)("group",{position:[e.x,0,e.z],children:["N"===i?[f([-l,1.25,-a],[o,2.5,.04],"n1"),f([l,1.25,-a],[o,2.5,.04],"n2")]:f([0,1.25,-a],[e.w,2.5,.04],"n"),"S"===i?[f([-l,1.25,a],[o,2.5,.04],"s1"),f([l,1.25,a],[o,2.5,.04],"s2")]:f([0,1.25,a],[e.w,2.5,.04],"s"),"W"===i?[f([-r,1.25,-l],[.04,2.5,o],"w1"),f([-r,1.25,l],[.04,2.5,o],"w2")]:f([-r,1.25,0],[.04,2.5,e.d],"w"),"E"===i?[f([r,1.25,-l],[.04,2.5,o],"e1"),f([r,1.25,l],[.04,2.5,o],"e2")]:f([r,1.25,0],[.04,2.5,e.d],"e"),[[-1,-1],[1,-1],[1,1],[-1,1]].map(([e,i],s)=>(0,I.jsxs)("mesh",{position:[e*r,1.25,i*a],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.07,2.5,.07]}),(0,I.jsx)("meshStandardMaterial",{color:t.trim,roughness:.45,metalness:.5})]},s)),(0,I.jsx)(ed.Html,{position:[u,2.8,c],center:!0,distanceFactor:12,pointerEvents:"none",zIndexRange:[6,0],children:(0,I.jsx)("div",{style:{whiteSpace:"nowrap",padding:"3px 11px",borderRadius:9,background:e.color,color:"#0b0d14",fontSize:12,fontWeight:800,letterSpacing:.4,fontFamily:"ui-sans-serif, system-ui, sans-serif"},children:e.name.toUpperCase()})})]})]})}function eE({x:e,z:t,label:r,labelColor:a}){return(0,I.jsx)(ed.Html,{position:[e,.55,t],center:!0,distanceFactor:13,pointerEvents:"none",zIndexRange:[4,0],children:(0,I.jsx)("div",{style:{whiteSpace:"nowrap",padding:"2px 9px",borderRadius:8,background:"rgba(15,17,24,0.6)",color:a,fontSize:11,fontWeight:700,letterSpacing:.5,fontFamily:"ui-sans-serif, system-ui, sans-serif"},children:r})})}function eM({plan:e,t3:t,deskChairs:r=!0}){let a=[...e.rooms.flatMap(e=>e.desks),...e.bullpen.agentDesks],i=(0,G.useMemo)(()=>(function(e,t){let r=X(777),[a,i]=Z(512),[s,n]=Z(512),[o,l]=Z(512);i.fillStyle=e,i.fillRect(0,0,512,512),l.fillStyle="#808080",l.fillRect(0,0,512,512);for(let e=0;e<512;e+=3)i.fillStyle=`rgba(0,0,0,${.04+.05*(e%6==0)})`,i.fillRect(0,e,512,1),l.fillStyle="rgba(96,96,96,0.5)",l.fillRect(0,e,512,1);for(let e=0;e<512;e+=3)i.fillStyle="rgba(255,255,255,0.035)",i.fillRect(e,0,1,512);for(let e=0;e<5e3;e++){let e=.08*r();i.fillStyle=r()>.5?`rgba(255,255,255,${e})`:`rgba(0,0,0,${e})`,i.fillRect(512*r(),512*r(),1.6,1.6)}return n.fillStyle="#f2f2f2",n.fillRect(0,0,512,512),{map:J(a,!0,t),roughnessMap:J(s,!1,t),normalMap:J(q(o,.8),!1,t)}})("#ffffff",[1.6,1.6]),[]),s=e.rooms.find(e=>"__conference__"===e.id),n=Math.min(.55*e.lounge.w,3.2);return(0,I.jsxs)(I.Fragment,{children:[e.rooms.map(e=>(0,I.jsx)(eB,{room:e,t3:t},e.id)),s?(0,I.jsx)(eC,{room:s}):null,(0,I.jsx)(eE,{x:e.lounge.x,z:e.lounge.z-e.lounge.d/2+.4,label:"LOUNGE",labelColor:"#bfe0ff"}),(0,I.jsx)(eE,{x:e.bullpen.x,z:e.bullpen.z-e.bullpen.d/2-.3,label:"BULLPEN",labelColor:"#dfe6f2"}),a.map(t=>{let a=e.entityByKey.get(t.agentId)?.isDefault;return(0,I.jsxs)("group",{children:[(0,I.jsx)(eD,{color:t.color,status:t.status,position:[t.desk.x,0,t.desk.z],rotationY:t.deskYaw}),a||!r?null:(0,I.jsx)(ew,{position:[t.seat.x,0,t.seat.z],rotationY:t.faceYaw+Math.PI})]},t.key)}),e.bullpen.spots.map((e,t)=>(0,I.jsx)(eD,{color:"#8a93b0",status:"offline",position:[e.deskX,0,e.deskZ],rotationY:e.deskYaw,ghost:!0},`spot-${t}`)),e.lounge.seats.map((e,r)=>(0,I.jsx)(eS,{position:[e.x,0,e.z],rotationY:e.yaw,fabric:i,color:t.sofa},`sofa-${r}`)),(0,I.jsx)(ey,{position:[e.lounge.x-e.lounge.w/2+.45,0,e.backZ+W.WALL_T+.55],glow:t.lampGlow,lit:t.lampLight>0}),(0,I.jsx)(eT,{x:e.lounge.x+e.lounge.w/2-n/2-.3,z:e.backZ+W.WALL_T+.42,w:n})]})}var eb=e.i(97106);function eI(e,t,r,a,i,s){e.beginPath(),e.moveTo(t+s,r),e.arcTo(t+a,r,t+a,r+i,s),e.arcTo(t+a,r+i,t,r+i,s),e.arcTo(t,r+i,t,r,s),e.arcTo(t,r,t+a,r,s),e.closePath()}function eP({plan:e,tasks:t,agents:r}){let{canvas:a,tex:i}=(0,G.useMemo)(()=>{let e=document.createElement("canvas");e.width=2048,e.height=440;let t=new O.CanvasTexture(e);return t.colorSpace=O.SRGBColorSpace,t.anisotropy=8,{canvas:e,tex:t}},[]),s=(0,G.useMemo)(()=>new Map(r.map(e=>[e.id,e.color??"#8a93b0"])),[r]),n=t.map(e=>`${e.id}:${e.status}`).join("|");(0,G.useEffect)(()=>{!function(e,t,r){let a=e.getContext("2d");if(!a)return;let i=e.width,s=e.height;a.fillStyle="#f7f8fb",a.fillRect(0,0,i,s),a.fillStyle="#1f242e",a.font="700 26px ui-sans-serif, system-ui, sans-serif",a.fillText("WORKBOARD",24,36),a.fillStyle="#28d6a8",a.beginPath(),a.arc(192,28,6,0,2*Math.PI),a.fill(),a.font="600 16px ui-sans-serif, system-ui, sans-serif",a.fillText("LIVE",204,34);let n=(0,eb.boardColumns)(t),o=(i-48-14*(n.length-1))/n.length;n.forEach((e,t)=>{let i=24+t*(o+14);a.fillStyle="#eceef3",eI(a,i,52,o,s-52-16,12),a.fill(),a.fillStyle=e.accent,eI(a,i,52,o,6,3),a.fill(),a.fillStyle="#39404d",a.font="700 17px ui-sans-serif, system-ui, sans-serif",a.fillText(e.title,i+14,80),a.font="600 14px ui-sans-serif, system-ui, sans-serif";let n=String(e.items.length),l=a.measureText(n).width+16;a.fillStyle=e.accent,eI(a,i+o-l-10,64,l,22,11),a.fill(),a.fillStyle="#fff",a.fillText(n,i+o-l-2,80);let c=Math.floor((s-52-80)/58);e.items.slice(0,c).forEach((e,t)=>{var s;let n=96+58*t;a.fillStyle="#fff",eI(a,i+8,n,o-16,50,8),a.fill(),a.fillStyle=r.get(e.agentId??"")??"#8a93b0",a.fillRect(i+8,n+5,5,40),a.fillStyle="#262c36",a.font="500 16px ui-sans-serif, system-ui, sans-serif",a.fillText((s=e.label,s.length>28?s.slice(0,27)+"…":s),i+22,n+21),a.fillStyle="#8b94a3",a.font="400 13px ui-sans-serif, system-ui, sans-serif",a.fillText(e.agentId??"",i+22,n+41)})})}(a,t,s),i.needsUpdate=!0},[n,s,a,i]);let o=e.board;return(0,I.jsxs)("group",{position:[-e.halfW+.28,0,o.z],rotation:[0,Math.PI/2,0],children:[(0,I.jsxs)("mesh",{position:[0,o.yCenter,-.01],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[o.w+.34,o.h+.3,.09]}),(0,I.jsx)("meshStandardMaterial",{color:"#23262e",roughness:.5,metalness:.2})]}),(0,I.jsxs)("mesh",{position:[0,o.yCenter,.045],children:[(0,I.jsx)("planeGeometry",{args:[o.w+.05,o.h]}),(0,I.jsx)("meshStandardMaterial",{map:i,emissive:"#ffffff",emissiveMap:i,emissiveIntensity:.42,roughness:.45})]}),(0,I.jsxs)("mesh",{position:[0,o.yCenter-o.h/2-.09,.06],castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.35*o.w,.035,.12]}),(0,I.jsx)("meshStandardMaterial",{color:"#2e323b",roughness:.5,metalness:.3})]}),[-.4,-.15,.2].map((e,t)=>(0,I.jsxs)("mesh",{position:[e,o.yCenter-o.h/2-.06,.06],rotation:[0,0,Math.PI/2],children:[(0,I.jsx)("cylinderGeometry",{args:[.014,.014,.12,8]}),(0,I.jsx)("meshStandardMaterial",{color:["#d94040","#2f77d4","#2ea562"][t],roughness:.4})]},t))]})}var eR=e.i(53737);function eF(e,t){return e.length>t?e.slice(0,t-1)+"…":e}function eU(e,t){return"idle"===e||"offline"===e?t??eg.STATUS_META[e].color:eg.STATUS_META[e].color}function eL({color:e,status:t,style:r=K.DEFAULT_BOT_STYLE}){var a;let i=(0,G.useRef)(null),s=(0,G.useMemo)(()=>(0,em.phaseFor)(e),[e]),n=(a=r.eyes,"idle"===t||"offline"===t?a:eg.STATUS_META[t]?.glow??a),o="tool"===t||"thinking"===t||"cron"===t;return(0,ef.useFrame)(()=>{if(!i.current)return;let e=(0,em.nowSeconds)(),r="idle"===t||"offline"===t?1:1.8,a=o?r+.7*Math.sin(5*e+s):r;i.current.traverse(e=>{let t=e.material;t&&t.emissive&&(t.emissiveIntensity=a)})}),(0,I.jsxs)("group",{children:[(0,I.jsxs)("mesh",{position:[0,.42,0],scale:[1,1.16,.94],castShadow:!0,children:[(0,I.jsx)("sphereGeometry",{args:[.2,24,20]}),(0,I.jsx)("meshStandardMaterial",{color:r.body,roughness:.32,metalness:.04})]}),(0,I.jsxs)("mesh",{position:[0,.34,0],rotation:[Math.PI/2,0,0],children:[(0,I.jsx)("torusGeometry",{args:[.16,.018,8,28]}),(0,I.jsx)("meshStandardMaterial",{color:e,roughness:.5,metalness:.1,emissive:e,emissiveIntensity:.25})]}),[-1,1].map(e=>(0,I.jsxs)("mesh",{position:[.21*e,.42,.01],rotation:[0,0,.5*e],castShadow:!0,children:[(0,I.jsx)("capsuleGeometry",{args:[.05,.14,4,10]}),(0,I.jsx)("meshStandardMaterial",{color:"#d4d9e2",roughness:.4,metalness:.05})]},e)),(0,I.jsxs)("group",{position:[0,.72,0],children:[(0,I.jsxs)("mesh",{castShadow:!0,children:[(0,I.jsx)("boxGeometry",{args:[.4,.3,.34]}),(0,I.jsx)("meshStandardMaterial",{color:r.body,roughness:.3,metalness:.05})]}),[-1,1].map(e=>(0,I.jsxs)("mesh",{position:[.225*e,0,0],rotation:[0,0,Math.PI/2],children:[(0,I.jsx)("cylinderGeometry",{args:[.075,.075,.06,16]}),(0,I.jsx)("meshStandardMaterial",{color:"#cfd4de",roughness:.4,metalness:.1})]},e)),(0,I.jsxs)("mesh",{position:[0,0,.16],children:[(0,I.jsx)("boxGeometry",{args:[.32,.22,.05]}),(0,I.jsx)("meshStandardMaterial",{color:r.visor,roughness:.18,metalness:.2})]}),(0,I.jsxs)("group",{ref:i,children:[[-.072,.072].map(e=>(0,I.jsxs)("mesh",{position:[e,.03,.2],scale:[1,1.35,1],children:[(0,I.jsx)("sphereGeometry",{args:[.026,14,14]}),(0,I.jsx)("meshStandardMaterial",{color:n,emissive:n,emissiveIntensity:1.6,toneMapped:!1,roughness:.4})]},e)),(0,I.jsxs)("mesh",{position:[0,-.05,.2],children:[(0,I.jsx)("boxGeometry",{args:[.075,.02,.012]}),(0,I.jsx)("meshStandardMaterial",{color:n,emissive:n,emissiveIntensity:1.6,toneMapped:!1,roughness:.4})]})]})]})]})}function eG({y:e}){let t=(0,G.useRef)(null);return(0,ef.useFrame)(()=>{let e=(0,em.nowSeconds)();if(t.current){let r=1+.18*Math.sin(5*e);t.current.scale.set(r,r,r),t.current.material.opacity=.5+.3*Math.sin(5*e)}}),(0,I.jsxs)("mesh",{ref:t,position:[0,e,0],rotation:[-Math.PI/2,0,0],children:[(0,I.jsx)("ringGeometry",{args:[.2,.27,32]}),(0,I.jsx)("meshStandardMaterial",{color:eg.STATUS_META.cron.color,emissive:eg.STATUS_META.cron.color,emissiveIntensity:1,transparent:!0,opacity:.7})]})}function eO({y:e,status:t}){let r=(0,G.useRef)(null),a=eg.STATUS_META[t]?.color??"#39e6e0";return(0,ef.useFrame)(()=>{let t=(0,em.nowSeconds)();r.current&&(r.current.rotation.y=2.2*t,r.current.position.y=e+.03*Math.sin(3*t))}),(0,I.jsxs)("mesh",{ref:r,position:[0,e,0],scale:[.055,.09,.055],castShadow:!0,children:[(0,I.jsx)("octahedronGeometry",{args:[1,0]}),(0,I.jsx)("meshStandardMaterial",{color:a,emissive:a,emissiveIntensity:1.5,toneMapped:!1,roughness:.2})]})}function eN({name:e,color:t,status:r,activity:a,small:i,y:s}){return(0,I.jsx)(ed.Html,{position:[0,s,0],center:!0,distanceFactor:10,pointerEvents:"none",zIndexRange:[10,0],children:(0,I.jsxs)("div",{style:{textAlign:"center",whiteSpace:"nowrap",pointerEvents:"none"},children:[(0,I.jsx)("style",{children:"@keyframes ccPulse{0%,100%{opacity:.25;transform:scale(.8)}40%{opacity:1;transform:scale(1.15)}}"}),"thinking"===r?(0,I.jsx)("div",{style:{display:"flex",justifyContent:"center",gap:3.5,padding:i?"3px 8px":"4px 10px",borderRadius:11,background:"rgba(255,255,255,0.95)",border:"1px solid rgba(124,92,255,0.55)",marginBottom:4},children:[0,1,2].map(e=>(0,I.jsx)("span",{style:{width:i?3.5:4.5,height:i?3.5:4.5,borderRadius:3,background:"#7c5cff",animation:`ccPulse 1.2s ${.18*e}s infinite`}},e))}):null,(0,I.jsx)("div",{style:{display:"inline-block",padding:i?"1px 7px":"2px 9px",borderRadius:9,background:"rgba(15,17,24,0.82)",color:"rgba(255,255,255,0.95)",fontSize:i?10:12,fontWeight:600,fontFamily:"ui-sans-serif, system-ui, sans-serif"},children:e}),a&&("tool"===r||"cron"===r)?(0,I.jsx)("div",{style:{marginTop:4,padding:"2px 8px",borderRadius:7,background:"rgba(15,17,24,0.9)",border:`1px solid ${eU(r,t)}90`,color:eU(r,t),fontSize:10.5,fontFamily:"ui-monospace, SFMono-Regular, monospace"},children:eF(a,26)}):null]})})}function eH({plan:e,botStyle:t=K.DEFAULT_BOT_STYLE}){let r=(0,G.useRef)(new Map),a=(0,G.useRef)(new Map);(0,ef.useFrame)((t,i)=>{let s=em.sharedWalkers.tick(e,(0,em.nowSeconds)(),i);for(let[t,i]of(a.current=s,s)){let a=r.current.get(t);if(!a)continue;let s=e.entityByKey.get(t),n=s?.isDefault?0:W.SEAT_Y;a.position.set(i.x,(i.seated?n:0)+i.bob,i.z),a.rotation.y=i.yaw}});let i=[...e.entityByKey.values()];return(0,I.jsx)(I.Fragment,{children:i.map(a=>{let i,s="tool"===a.status||"thinking"===a.status||"error"===a.status,n=a.isDefault?1.2:1.15;return(0,I.jsxs)("group",{ref:(i=a.key,e=>{e?r.current.set(i,e):r.current.delete(i)}),scale:a.isSub?.82:1,position:[e.entrance.x,0,e.entrance.z],children:[a.isDefault?(0,I.jsx)(eR.default,{status:a.status,seed:a.key}):(0,I.jsx)(eL,{color:a.color,status:a.status,style:t}),"cron"===a.status?(0,I.jsx)(eG,{y:n+.2}):null,s?(0,I.jsx)(eO,{y:n+.12,status:a.status}):null,(0,I.jsx)(eN,{name:eF(a.label,16),color:a.color,status:a.status,activity:a.activity?.title,small:a.isSub,y:n+(s?.32:.05)})]},a.key)})})}var ez=O,ek=e.i(58013),ej=e.i(55393),eQ=(e.i(99143),O),eV=(t=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),r=new Float32Array([0,0,2,0,0,2]),(a=new eQ.BufferGeometry).setAttribute("position",new eQ.BufferAttribute(t,3)),a.setAttribute("uv",new eQ.BufferAttribute(r,2)),a),eW=class e{static get fullscreenGeometry(){return eV}constructor(e="Pass",t=new eQ.Scene,r=new eQ.OrthographicCamera){this.name=e,this.renderer=null,this.scene=t,this.camera=r,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthBlit=!1,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(e){if(this.rtt===e){let t=this.fullscreenMaterial;null!==t&&(t.needsUpdate=!0),this.rtt=!e}}set mainScene(e){}set mainCamera(e){}setRenderer(e){this.renderer=e}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}get fullscreenMaterial(){return null!==this.screen?this.screen.material:null}set fullscreenMaterial(t){let r=this.screen;null!==r?r.material=t:((r=new eQ.Mesh(e.fullscreenGeometry,t)).frustumCulled=!1,null===this.scene&&(this.scene=new eQ.Scene),this.scene.add(r),this.screen=r)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(e){this.fullscreenMaterial=e}getDepthTexture(){return null}setDepthTexture(e,t=eQ.BasicDepthPacking){}render(e,t,r,a,i){throw Error("Render method not implemented!")}setSize(e,t){}initialize(e,t,r){}dispose(){for(let t of Object.keys(this)){let r=this[t];(r instanceof eQ.WebGLRenderTarget||r instanceof eQ.Material||r instanceof eQ.Texture||r instanceof e)&&this[t].dispose()}null!==this.fullscreenMaterial&&this.fullscreenMaterial.dispose()}},eY=class extends eW{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,r,a,i){let s=e.state.buffers.stencil;s.setLocked(!1),s.setTest(!1)}},eK=`#ifdef COLOR_WRITE
|
|
102
|
+
#include <common>
|
|
103
|
+
#include <dithering_pars_fragment>
|
|
104
|
+
#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
105
|
+
uniform mediump sampler2D inputBuffer;
|
|
106
|
+
#else
|
|
107
|
+
uniform lowp sampler2D inputBuffer;
|
|
108
|
+
#endif
|
|
109
|
+
#endif
|
|
110
|
+
#ifdef DEPTH_WRITE
|
|
111
|
+
#include <packing>
|
|
112
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
113
|
+
uniform highp sampler2D depthBuffer;
|
|
114
|
+
#else
|
|
115
|
+
uniform mediump sampler2D depthBuffer;
|
|
116
|
+
#endif
|
|
117
|
+
float readDepth(const in vec2 uv){
|
|
118
|
+
#if DEPTH_PACKING == 3201
|
|
119
|
+
return unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
120
|
+
#else
|
|
121
|
+
return texture2D(depthBuffer,uv).r;
|
|
122
|
+
#endif
|
|
123
|
+
}
|
|
124
|
+
#endif
|
|
125
|
+
#ifdef USE_WEIGHTS
|
|
126
|
+
uniform vec4 channelWeights;
|
|
127
|
+
#endif
|
|
128
|
+
uniform float opacity;varying vec2 vUv;void main(){
|
|
129
|
+
#ifdef COLOR_WRITE
|
|
130
|
+
vec4 texel=texture2D(inputBuffer,vUv);
|
|
131
|
+
#ifdef USE_WEIGHTS
|
|
132
|
+
texel*=channelWeights;
|
|
133
|
+
#endif
|
|
134
|
+
gl_FragColor=opacity*texel;
|
|
135
|
+
#ifdef COLOR_SPACE_CONVERSION
|
|
136
|
+
#include <colorspace_fragment>
|
|
137
|
+
#endif
|
|
138
|
+
#include <dithering_fragment>
|
|
139
|
+
#else
|
|
140
|
+
gl_FragColor=vec4(0.0);
|
|
141
|
+
#endif
|
|
142
|
+
#ifdef DEPTH_WRITE
|
|
143
|
+
gl_FragDepth=readDepth(vUv);
|
|
144
|
+
#endif
|
|
145
|
+
}`,eX="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",eZ=class extends eQ.ShaderMaterial{constructor(){super({name:"CopyMaterial",defines:{COLOR_SPACE_CONVERSION:"1",DEPTH_PACKING:"0",COLOR_WRITE:"1"},uniforms:{inputBuffer:new eQ.Uniform(null),depthBuffer:new eQ.Uniform(null),channelWeights:new eQ.Uniform(null),opacity:new eQ.Uniform(1)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:eK,vertexShader:eX}),this.depthFunc=eQ.AlwaysDepth}get inputBuffer(){return this.uniforms.inputBuffer.value}set inputBuffer(e){let t=null!==e;this.colorWrite!==t&&(t?this.defines.COLOR_WRITE=!0:delete this.defines.COLOR_WRITE,this.colorWrite=t,this.needsUpdate=!0),this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){let t=null!==e;this.depthWrite!==t&&(t?this.defines.DEPTH_WRITE=!0:delete this.defines.DEPTH_WRITE,this.depthTest=t,this.depthWrite=t,this.needsUpdate=!0),this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get colorSpaceConversion(){return void 0!==this.defines.COLOR_SPACE_CONVERSION}set colorSpaceConversion(e){this.colorSpaceConversion!==e&&(e?this.defines.COLOR_SPACE_CONVERSION=!0:delete this.defines.COLOR_SPACE_CONVERSION,this.needsUpdate=!0)}get channelWeights(){return this.uniforms.channelWeights.value}set channelWeights(e){null!==e?(this.defines.USE_WEIGHTS="1",this.uniforms.channelWeights.value=e):delete this.defines.USE_WEIGHTS,this.needsUpdate=!0}setInputBuffer(e){this.uniforms.inputBuffer.value=e}getOpacity(e){return this.uniforms.opacity.value}setOpacity(e){this.uniforms.opacity.value=e}},eJ=class extends eW{constructor(e,t=!0){super("CopyPass"),this.fullscreenMaterial=new eZ,this.needsSwap=!1,this.renderTarget=e,void 0===e&&(this.renderTarget=new eQ.WebGLRenderTarget(1,1,{minFilter:eQ.LinearFilter,magFilter:eQ.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="CopyPass.Target"),this.autoResize=t}get resize(){return this.autoResize}set resize(e){this.autoResize=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(e){this.autoResize=e}render(e,t,r,a,i){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){this.autoResize&&this.renderTarget.setSize(e,t)}initialize(e,t,r){void 0!==r&&(this.renderTarget.texture.type=r,r!==eQ.UnsignedByteType?this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1":null!==e&&e.outputColorSpace===eQ.SRGBColorSpace&&(this.renderTarget.texture.colorSpace=eQ.SRGBColorSpace))}},eq=new eQ.Color,e_=class extends eW{constructor(e=!0,t=!0,r=!1){super("ClearPass",null,null),this.needsSwap=!1,this.color=e,this.depth=t,this.stencil=r,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(e,t,r){this.color=e,this.depth=t,this.stencil=r}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(e){this.overrideClearColor=e}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(e){this.overrideClearAlpha=e}render(e,t,r,a,i){let s=this.overrideClearColor,n=this.overrideClearAlpha,o=e.getClearAlpha(),l=null!==s,c=n>=0;l?(e.getClearColor(eq),e.setClearColor(s,c?n:o)):c&&e.setClearAlpha(n),e.setRenderTarget(this.renderToScreen?null:t),e.clear(this.color,this.depth,this.stencil),l?e.setClearColor(eq,o):c&&e.setClearAlpha(o)}},e$=class extends eW{constructor(e,t){super("MaskPass",e,t),this.needsSwap=!1,this.clearPass=new e_(!1,!1,!0),this.inverse=!1}set mainScene(e){this.scene=e}set mainCamera(e){this.camera=e}get inverted(){return this.inverse}set inverted(e){this.inverse=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(e){this.inverted=e}render(e,t,r,a,i){let s=e.getContext(),n=e.state.buffers,o=this.scene,l=this.camera,c=this.clearPass,u=+!this.inverted;n.color.setMask(!1),n.depth.setMask(!1),n.color.setLocked(!0),n.depth.setLocked(!0),n.stencil.setTest(!0),n.stencil.setOp(s.REPLACE,s.REPLACE,s.REPLACE),n.stencil.setFunc(s.ALWAYS,u,0xffffffff),n.stencil.setClear(1-u),n.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?c.render(e,null):(c.render(e,t),c.render(e,r))),this.renderToScreen?e.setRenderTarget(null):(e.setRenderTarget(t),e.render(o,l),e.setRenderTarget(r)),e.render(o,l),n.color.setLocked(!1),n.depth.setLocked(!1),n.stencil.setLocked(!1),n.stencil.setFunc(s.EQUAL,1,0xffffffff),n.stencil.setOp(s.KEEP,s.KEEP,s.KEEP),n.stencil.setLocked(!0)}},e0=class{constructor(){this.startTime=performance.now(),this.previousTime=0,this.currentTime=0,this._delta=0,this._elapsed=0,this._fixedDelta=1e3/60,this.timescale=1,this.useFixedDelta=!1,this._autoReset=!1}get autoReset(){return this._autoReset}set autoReset(e){"u">typeof document&&void 0!==document.hidden&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this._autoReset=e)}get delta(){return .001*this._delta}get fixedDelta(){return .001*this._fixedDelta}set fixedDelta(e){this._fixedDelta=1e3*e}get elapsed(){return .001*this._elapsed}update(e){this.useFixedDelta?this._delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=(void 0!==e?e:performance.now())-this.startTime,this._delta=this.currentTime-this.previousTime),this._delta*=this.timescale,this._elapsed+=this._delta}reset(){this._delta=0,this._elapsed=0,this.currentTime=performance.now()-this.startTime}getDelta(){return this.delta}getElapsed(){return this.elapsed}handleEvent(e){document.hidden||(this.currentTime=performance.now()-this.startTime)}dispose(){this.autoReset=!1}},e2=class{constructor(e=null,{depthBuffer:t=!0,stencilBuffer:r=!1,multisampling:a=0,frameBufferType:i}={}){this.renderer=null,this.inputBuffer=this.createBuffer(t,r,i,a),this.outputBuffer=this.inputBuffer.clone(),this.copyPass=new eJ,this.depthTexture=null,this.depthRenderTarget=null,this.passes=[],this.timer=new e0,this.autoRenderToScreen=!0,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples}set multisampling(e){let t=this.inputBuffer,r=this.multisampling;r>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):r!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e),this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,null!==e){let t=e.getSize(new eQ.Vector2),r=e.getContext().getContextAttributes().alpha,a=this.inputBuffer.texture.type;for(let i of(a===eQ.UnsignedByteType&&e.outputColorSpace===eQ.SRGBColorSpace&&(this.inputBuffer.texture.colorSpace=eQ.SRGBColorSpace,this.outputBuffer.texture.colorSpace=eQ.SRGBColorSpace,this.inputBuffer.dispose(),this.outputBuffer.dispose()),e.autoClear=!1,this.setSize(t.width,t.height),this.passes))i.initialize(e,r,a)}}replaceRenderer(e,t=!0){let r=this.renderer,a=r.domElement.parentNode;return this.setRenderer(e),t&&null!==a&&(a.removeChild(r.domElement),a.appendChild(e.domElement)),r}createDepthTexture(){let e=this.inputBuffer,t=new eQ.DepthTexture;this.depthTexture=t,e.stencilBuffer?(t.format=eQ.DepthStencilFormat,t.type=eQ.UnsignedInt248Type):t.type=eQ.FloatType;let r=t.clone();return r.name="EffectComposer.StableDepth",this.depthRenderTarget=new eQ.WebGLRenderTarget(e.width,e.height,{depthBuffer:!0,stencilBuffer:e.stencilBuffer,depthTexture:r}),r}blitDepthBuffer(e){let t=this.renderer,r=this.depthRenderTarget,a=t.properties,i=t.getContext();t.setRenderTarget(r);let s=a.get(e).__webglFramebuffer,n=a.get(r).__webglFramebuffer,o=e.stencilBuffer?i.DEPTH_BUFFER_BIT|i.STENCIL_BUFFER_BIT:i.DEPTH_BUFFER_BIT;i.bindFramebuffer(i.READ_FRAMEBUFFER,s),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,n),i.blitFramebuffer(0,0,e.width,e.height,0,0,r.width,r.height,o,i.NEAREST),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null),t.setRenderTarget(null)}deleteDepthTexture(){if(null!==this.depthTexture)for(let e of(this.depthTexture.dispose(),this.depthTexture=null,this.depthRenderTarget.dispose(),this.depthRenderTarget=null,this.inputBuffer.depthTexture=null,this.outputBuffer.depthTexture=null,this.passes))e.setDepthTexture(null)}createBuffer(e,t,r,a){let i=this.renderer,s=null===i?new eQ.Vector2:i.getDrawingBufferSize(new eQ.Vector2),n={minFilter:eQ.LinearFilter,magFilter:eQ.LinearFilter,stencilBuffer:t,depthBuffer:e,type:r},o=new eQ.WebGLRenderTarget(s.width,s.height,n);return a>0&&(o.samples=a),r===eQ.UnsignedByteType&&null!==i&&i.outputColorSpace===eQ.SRGBColorSpace&&(o.texture.colorSpace=eQ.SRGBColorSpace),o.texture.name="EffectComposer.Buffer",o.texture.generateMipmaps=!1,o}setMainScene(e){for(let t of this.passes)t.mainScene=e}setMainCamera(e){for(let t of this.passes)t.mainCamera=e}addPass(e,t){let r=this.passes,a=this.renderer,i=a.getDrawingBufferSize(new eQ.Vector2),s=a.getContext().getContextAttributes().alpha,n=this.inputBuffer.texture.type;if(e.renderer=a,e.setSize(i.width,i.height),e.initialize(a,s,n),this.autoRenderToScreen&&(r.length>0&&(r[r.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),void 0!==t?r.splice(t,0,e):r.push(e),this.autoRenderToScreen&&(r[r.length-1].renderToScreen=!0),e.needsDepthTexture||null!==this.depthTexture)if(null===this.depthTexture){let t=this.createDepthTexture();for(e of r)e.setDepthTexture(t)}else{let t=this.depthRenderTarget.depthTexture;e.setDepthTexture(t)}}removePass(e){let t=this.passes,r=t.indexOf(e);if(-1!==r&&t.splice(r,1).length>0){if(null!==this.depthTexture&&!t.reduce((e,t)=>e||t.needsDepthTexture,!1)){let t=this.depthRenderTarget.depthTexture;e.getDepthTexture()===t&&e.setDepthTexture(null),this.deleteDepthTexture()}this.autoRenderToScreen&&r===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0))}}removeAllPasses(){let e=this.passes;this.deleteDepthTexture(),e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){let t,r=this.renderer,a=this.copyPass,i=this.inputBuffer,s=this.outputBuffer,n=!1;for(let o of(void 0===e&&(this.timer.update(),e=this.timer.getDelta()),this.passes))if(o.enabled){if(i.depthTexture=this.depthTexture,s.depthTexture=null,o.render(r,i,s,e,n),o.needsDepthBlit&&null!==this.depthRenderTarget&&this.blitDepthBuffer(i),o.needsSwap){if(n){a.renderToScreen=o.renderToScreen;let t=r.getContext(),l=r.state.buffers.stencil;l.setFunc(t.NOTEQUAL,1,0xffffffff),a.render(r,i,s,e,n),l.setFunc(t.EQUAL,1,0xffffffff)}t=i,i=s,s=t}o instanceof e$?n=!0:o instanceof eY&&(n=!1)}}setSize(e,t,r){let a=this.renderer,i=a.getSize(new eQ.Vector2);(void 0===e||void 0===t)&&(e=i.width,t=i.height),(i.width!==e||i.height!==t)&&a.setSize(e,t,r);let s=a.getDrawingBufferSize(new eQ.Vector2);for(let e of(this.inputBuffer.setSize(s.width,s.height),this.outputBuffer.setSize(s.width,s.height),null!==this.depthRenderTarget&&this.depthRenderTarget.setSize(s.width,s.height),this.passes))e.setSize(s.width,s.height)}reset(){this.dispose(),this.autoRenderToScreen=!0}dispose(){for(let e of this.passes)e.dispose();this.passes=[],null!==this.inputBuffer&&this.inputBuffer.dispose(),null!==this.outputBuffer&&this.outputBuffer.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose(),eW.fullscreenGeometry.dispose()}},e1={FRAGMENT_HEAD:"FRAGMENT_HEAD",FRAGMENT_MAIN_UV:"FRAGMENT_MAIN_UV",FRAGMENT_MAIN_IMAGE:"FRAGMENT_MAIN_IMAGE",VERTEX_HEAD:"VERTEX_HEAD",VERTEX_MAIN_SUPPORT:"VERTEX_MAIN_SUPPORT"},e4=class{constructor(){this.shaderParts=new Map([[e1.FRAGMENT_HEAD,null],[e1.FRAGMENT_MAIN_UV,null],[e1.FRAGMENT_MAIN_IMAGE,null],[e1.VERTEX_HEAD,null],[e1.VERTEX_MAIN_SUPPORT,null]]),this.defines=new Map,this.uniforms=new Map,this.blendModes=new Map,this.extensions=new Set,this.attributes=0,this.varyings=new Set,this.uvTransformation=!1,this.readDepth=!1,this.colorSpace=eQ.LinearSRGBColorSpace}},e5=!1,e3=class{constructor(e=null){this.originalMaterials=new Map,this.material=null,this.materials=null,this.materialsBackSide=null,this.materialsDoubleSide=null,this.materialsFlatShaded=null,this.materialsFlatShadedBackSide=null,this.materialsFlatShadedDoubleSide=null,this.setMaterial(e),this.meshCount=0,this.replaceMaterial=e=>{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case eQ.DoubleSide:t=this.materialsFlatShadedDoubleSide;break;case eQ.BackSide:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded}else switch(e.material.side){case eQ.DoubleSide:t=this.materialsDoubleSide;break;case eQ.BackSide:t=this.materialsBackSide;break;default:t=this.materials}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}cloneMaterial(e){if(!(e instanceof eQ.ShaderMaterial))return e.clone();let t=e.uniforms,r=new Map;for(let e in t){let a=t[e].value;a.isRenderTargetTexture&&(t[e].value=null,r.set(e,a))}let a=e.clone();for(let e of r)t[e[0]].value=e[1],a.uniforms[e[0]].value=e[1];return a}setMaterial(e){if(this.disposeMaterials(),this.material=e,null!==e){let t=this.materials=[this.cloneMaterial(e),this.cloneMaterial(e),this.cloneMaterial(e)];for(let r of t)r.uniforms=Object.assign({},e.uniforms),r.side=eQ.FrontSide;t[2].skinning=!0,this.materialsBackSide=t.map(t=>{let r=this.cloneMaterial(t);return r.uniforms=Object.assign({},e.uniforms),r.side=eQ.BackSide,r}),this.materialsDoubleSide=t.map(t=>{let r=this.cloneMaterial(t);return r.uniforms=Object.assign({},e.uniforms),r.side=eQ.DoubleSide,r}),this.materialsFlatShaded=t.map(t=>{let r=this.cloneMaterial(t);return r.uniforms=Object.assign({},e.uniforms),r.flatShading=!0,r}),this.materialsFlatShadedBackSide=t.map(t=>{let r=this.cloneMaterial(t);return r.uniforms=Object.assign({},e.uniforms),r.flatShading=!0,r.side=eQ.BackSide,r}),this.materialsFlatShadedDoubleSide=t.map(t=>{let r=this.cloneMaterial(t);return r.uniforms=Object.assign({},e.uniforms),r.flatShading=!0,r.side=eQ.DoubleSide,r})}}render(e,t,r){let a=e.shadowMap.enabled;if(e.shadowMap.enabled=!1,e5){let a=this.originalMaterials;for(let i of(this.meshCount=0,t.traverse(this.replaceMaterial),e.render(t,r),a))i[0].material=i[1];this.meshCount!==a.size&&a.clear()}else{let a=t.overrideMaterial;t.overrideMaterial=this.material,e.render(t,r),t.overrideMaterial=a}e.shadowMap.enabled=a}disposeMaterials(){if(null!==this.material)for(let e of this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide))e.dispose()}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return e5}static set workaroundEnabled(e){e5=e}},e8=class extends eQ.EventDispatcher{constructor(e=null,t=-1,r=-1,a=1){super(),null!==e&&this.addEventListener("change",()=>e.setSize(this.baseSize.width,this.baseSize.height)),this.baseSize=new eQ.Vector2(1,1),this.preferredSize=new eQ.Vector2(t,r),this.target=this.preferredSize,this.s=a,this.effectiveSize=new eQ.Vector2,this.addEventListener("change",()=>this.updateEffectiveSize()),this.updateEffectiveSize()}updateEffectiveSize(){let e=this.baseSize,t=this.preferredSize,r=this.effectiveSize,a=this.scale;-1!==t.width?r.width=t.width:-1!==t.height?r.width=Math.round(t.height*(e.width/Math.max(e.height,1))):r.width=Math.round(e.width*a),-1!==t.height?r.height=t.height:-1!==t.width?r.height=Math.round(t.width/Math.max(e.width/Math.max(e.height,1),1)):r.height=Math.round(e.height*a)}get width(){return this.effectiveSize.width}set width(e){this.preferredWidth=e}get height(){return this.effectiveSize.height}set height(e){this.preferredHeight=e}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(e){this.s!==e&&(this.s=e,this.preferredSize.setScalar(-1),this.dispatchEvent({type:"change"}))}getScale(){return this.scale}setScale(e){this.scale=e}get baseWidth(){return this.baseSize.width}set baseWidth(e){this.baseSize.width!==e&&(this.baseSize.width=e,this.dispatchEvent({type:"change"}))}getBaseWidth(){return this.baseWidth}setBaseWidth(e){this.baseWidth=e}get baseHeight(){return this.baseSize.height}set baseHeight(e){this.baseSize.height!==e&&(this.baseSize.height=e,this.dispatchEvent({type:"change"}))}getBaseHeight(){return this.baseHeight}setBaseHeight(e){this.baseHeight=e}setBaseSize(e,t){(this.baseSize.width!==e||this.baseSize.height!==t)&&(this.baseSize.set(e,t),this.dispatchEvent({type:"change"}))}get preferredWidth(){return this.preferredSize.width}set preferredWidth(e){this.preferredSize.width!==e&&(this.preferredSize.width=e,this.dispatchEvent({type:"change"}))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(e){this.preferredWidth=e}get preferredHeight(){return this.preferredSize.height}set preferredHeight(e){this.preferredSize.height!==e&&(this.preferredSize.height=e,this.dispatchEvent({type:"change"}))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(e){this.preferredHeight=e}setPreferredSize(e,t){(this.preferredSize.width!==e||this.preferredSize.height!==t)&&(this.preferredSize.set(e,t),this.dispatchEvent({type:"change"}))}copy(e){this.s=e.scale,this.baseSize.set(e.baseWidth,e.baseHeight),this.preferredSize.set(e.preferredWidth,e.preferredHeight),this.dispatchEvent({type:"change"})}static get AUTO_SIZE(){return -1}},e6=new class{constructor(e=0){this.nextId=e}getNextId(){return this.nextId++}reset(e=0){return this.nextId=e,this}}(2),e9=class extends Set{constructor(e,t=e6.getNextId()){super(),this.exclusive=!1,this._layer=t,(this._layer<1||this._layer>31)&&(console.warn("Layer out of range, resetting to 2"),e6.reset(2),this._layer=e6.getNextId()),void 0!==e&&this.set(e)}get layer(){return this._layer}set layer(e){let t=this._layer;for(let r of this)r.layers.disable(t),r.layers.enable(e);this._layer=e}getLayer(){return this.layer}setLayer(e){this.layer=e}isExclusive(){return this.exclusive}setExclusive(e){this.exclusive=e}clear(){let e=this.layer;for(let t of this)t.layers.disable(e);return super.clear()}set(e){for(let t of(this.clear(),e))this.add(t);return this}indexOf(e){return this.has(e)?0:-1}add(e){return this.exclusive?e.layers.set(this.layer):e.layers.enable(this.layer),super.add(e)}delete(e){return this.has(e)&&e.layers.disable(this.layer),super.delete(e)}toggle(e){let t;return this.has(e)?(this.delete(e),t=!1):(this.add(e),t=!0),t}setVisible(e){for(let t of this)e?t.layers.enable(0):t.layers.disable(0);return this}},e7=new Map([[0,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb+src.rgb;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[1,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){return mix(dst,src,src.a*opacity);}"],[2,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=(dst.rgb+src.rgb)*0.5;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[3,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(b.xy,a.z));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[4,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=dst.rgb,b=src.rgb;vec3 c=mix(step(0.0,b)*(1.0-min(vec3(1.0),(1.0-a)/max(b,1e-9))),vec3(1.0),step(1.0,a));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[5,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=dst.rgb,b=src.rgb;vec3 c=step(0.0,a)*mix(min(vec3(1.0),a/max(1.0-b,1e-9)),vec3(1.0),step(1.0,b));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[6,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=min(dst.rgb,src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[7,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=abs(dst.rgb-src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[8,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb/max(src.rgb,1e-9);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[9,null],[10,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb+src.rgb-2.0*dst.rgb*src.rgb;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[11,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=min(dst.rgb,1.0);vec3 b=min(src.rgb,1.0);vec3 c=mix(2.0*a*b,1.0-2.0*(1.0-a)*(1.0-b),step(0.5,b));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[12,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=step(1.0,dst.rgb+src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[13,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(b.x,a.yz));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[14,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(1.0-src.rgb,0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[15,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=src.rgb*max(1.0-dst.rgb,0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[16,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(dst.rgb,src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[17,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=clamp(src.rgb+dst.rgb-1.0,0.0,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[18,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=min(dst.rgb+src.rgb,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[19,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=clamp(2.0*src.rgb+dst.rgb-1.0,0.0,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[20,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(a.xy,b.z));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[21,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb*src.rgb;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[22,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(1.0-abs(1.0-dst.rgb-src.rgb),0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[23,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){return mix(dst,src,opacity);}"],[24,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=2.0*src.rgb*dst.rgb;vec3 b=1.0-2.0*(1.0-src.rgb)*(1.0-dst.rgb);vec3 c=mix(a,b,step(0.5,dst.rgb));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[25,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 src2=2.0*src.rgb;vec3 c=mix(mix(src2,dst.rgb,step(0.5*dst.rgb,src.rgb)),max(src2-1.0,vec3(0.0)),step(dst.rgb,src2-1.0));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[26,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=min(dst.rgb*dst.rgb/max(1.0-src.rgb,1e-9),1.0);vec3 c=mix(a,src.rgb,step(1.0,src.rgb));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[27,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(a.x,b.y,a.z));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[28,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb+src.rgb-min(dst.rgb*src.rgb,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[29,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 src2=2.0*src.rgb;vec3 d=dst.rgb+(src2-1.0);vec3 w=step(0.5,src.rgb);vec3 a=dst.rgb-(1.0-src2)*dst.rgb*(1.0-dst.rgb);vec3 b=mix(d*(sqrt(dst.rgb)-dst.rgb),d*dst.rgb*((16.0*dst.rgb-12.0)*dst.rgb+3.0),w*(1.0-step(0.25,dst.rgb)));vec3 c=mix(a,b,w);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[30,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){return src;}"],[31,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(dst.rgb-src.rgb,0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"],[32,"vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=mix(max(1.0-min((1.0-dst.rgb)/(2.0*src.rgb),1.0),0.0),min(dst.rgb/(2.0*(1.0-src.rgb)),1.0),step(0.5,src.rgb));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}"]]),te=class extends eQ.EventDispatcher{constructor(e,t=1){super(),this._blendFunction=e,this.opacity=new eQ.Uniform(t)}getOpacity(){return this.opacity.value}setOpacity(e){this.opacity.value=e}get blendFunction(){return this._blendFunction}set blendFunction(e){this._blendFunction=e,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(e){this.blendFunction=e}getShaderCode(){return e7.get(this.blendFunction)}};eQ.CanvasTexture;var tt=class extends eQ.EventDispatcher{constructor(e,t,{attributes:r=0,blendFunction:a=23,defines:i=new Map,uniforms:s=new Map,extensions:n=null,vertexShader:o=null}={}){super(),this.name=e,this.renderer=null,this.attributes=r,this.fragmentShader=t,this.vertexShader=o,this.defines=i,this.uniforms=s,this.extensions=n,this.blendMode=new te(a),this.blendMode.addEventListener("change",e=>this.setChanged()),this._inputColorSpace=eQ.LinearSRGBColorSpace,this._outputColorSpace=eQ.NoColorSpace}get inputColorSpace(){return this._inputColorSpace}set inputColorSpace(e){this._inputColorSpace=e,this.setChanged()}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e,this.setChanged()}set mainScene(e){}set mainCamera(e){}getName(){return this.name}setRenderer(e){this.renderer=e}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(e){this.attributes=e,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(e){this.fragmentShader=e,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(e){this.vertexShader=e,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(e,t=eQ.BasicDepthPacking){}update(e,t,r){}setSize(e,t){}initialize(e,t,r){}dispose(){for(let e of Object.keys(this)){let t=this[e];(t instanceof eQ.WebGLRenderTarget||t instanceof eQ.Material||t instanceof eQ.Texture||t instanceof eW)&&this[e].dispose()}}},tr=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
146
|
+
uniform mediump sampler2D inputBuffer;
|
|
147
|
+
#else
|
|
148
|
+
uniform lowp sampler2D inputBuffer;
|
|
149
|
+
#endif
|
|
150
|
+
varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25;
|
|
151
|
+
#include <colorspace_fragment>
|
|
152
|
+
}`,ta=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],ti=class extends eQ.ShaderMaterial{constructor(e=new eQ.Vector4){super({name:"KawaseBlurMaterial",uniforms:{inputBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(new eQ.Vector4),scale:new eQ.Uniform(1),kernel:new eQ.Uniform(0)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tr,vertexShader:"uniform vec4 texelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize.xy*vec2(kernel)+texelSize.zw)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}"}),this.setTexelSize(e.x,e.y),this.kernelSize=2}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.inputBuffer=e}get kernelSequence(){return ta[this.kernelSize]}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(){return this.uniforms.scale.value}setScale(e){this.uniforms.scale.value=e}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(e){this.uniforms.kernel.value=e}setKernel(e){this.kernel=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t,.5*e,.5*t)}setSize(e,t){let r=1/e,a=1/t;this.uniforms.texelSize.value.set(r,a,.5*r,.5*a)}},ts=class extends eW{constructor({kernelSize:e=2,resolutionScale:t=.5,width:r=e8.AUTO_SIZE,height:a=e8.AUTO_SIZE,resolutionX:i=r,resolutionY:s=a}={}){super("KawaseBlurPass"),this.renderTargetA=new eQ.WebGLRenderTarget(1,1,{depthBuffer:!1}),this.renderTargetA.texture.name="Blur.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="Blur.Target.B";const n=this.resolution=new e8(this,i,s,t);n.addEventListener("change",e=>this.setSize(n.baseWidth,n.baseHeight)),this._blurMaterial=new ti,this._blurMaterial.kernelSize=e,this.copyMaterial=new eZ}getResolution(){return this.resolution}get blurMaterial(){return this._blurMaterial}set blurMaterial(e){this._blurMaterial=e}get dithering(){return this.copyMaterial.dithering}set dithering(e){this.copyMaterial.dithering=e}get kernelSize(){return this.blurMaterial.kernelSize}set kernelSize(e){this.blurMaterial.kernelSize=e}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get scale(){return this.blurMaterial.scale}set scale(e){this.blurMaterial.scale=e}getScale(){return this.blurMaterial.scale}setScale(e){this.blurMaterial.scale=e}getKernelSize(){return this.kernelSize}setKernelSize(e){this.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,r,a,i){let s=this.scene,n=this.camera,o=this.renderTargetA,l=this.renderTargetB,c=this.blurMaterial,u=c.kernelSequence,f=t;this.fullscreenMaterial=c;for(let t=0,r=u.length;t<r;++t){let r=(1&t)==0?o:l;c.kernel=u[t],c.inputBuffer=f.texture,e.setRenderTarget(r),e.render(s,n),f=r}this.fullscreenMaterial=this.copyMaterial,this.copyMaterial.inputBuffer=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(s,n)}setSize(e,t){let r=this.resolution;r.setBaseSize(e,t);let a=r.width,i=r.height;this.renderTargetA.setSize(a,i),this.renderTargetB.setSize(a,i),this.blurMaterial.setSize(e,t)}initialize(e,t,r){void 0!==r&&(this.renderTargetA.texture.type=r,this.renderTargetB.texture.type=r,r!==eQ.UnsignedByteType?(this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1",this.copyMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1"):null!==e&&e.outputColorSpace===eQ.SRGBColorSpace&&(this.renderTargetA.texture.colorSpace=eQ.SRGBColorSpace,this.renderTargetB.texture.colorSpace=eQ.SRGBColorSpace))}static get AUTO_SIZE(){return e8.AUTO_SIZE}},tn=`#include <common>
|
|
153
|
+
#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
154
|
+
uniform mediump sampler2D inputBuffer;
|
|
155
|
+
#else
|
|
156
|
+
uniform lowp sampler2D inputBuffer;
|
|
157
|
+
#endif
|
|
158
|
+
#ifdef RANGE
|
|
159
|
+
uniform vec2 range;
|
|
160
|
+
#elif defined(THRESHOLD)
|
|
161
|
+
uniform float threshold;uniform float smoothing;
|
|
162
|
+
#endif
|
|
163
|
+
varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb);float mask=1.0;
|
|
164
|
+
#ifdef RANGE
|
|
165
|
+
float low=step(range.x,l);float high=step(l,range.y);mask=low*high;
|
|
166
|
+
#elif defined(THRESHOLD)
|
|
167
|
+
mask=smoothstep(threshold,threshold+smoothing,l);
|
|
168
|
+
#endif
|
|
169
|
+
#ifdef COLOR
|
|
170
|
+
gl_FragColor=texel*mask;
|
|
171
|
+
#else
|
|
172
|
+
gl_FragColor=vec4(l*mask);
|
|
173
|
+
#endif
|
|
174
|
+
}`,to=class extends eQ.ShaderMaterial{constructor(e=!1,t=null){super({name:"LuminanceMaterial",defines:{THREE_REVISION:eQ.REVISION.replace(/\D+/g,"")},uniforms:{inputBuffer:new eQ.Uniform(null),threshold:new eQ.Uniform(0),smoothing:new eQ.Uniform(1),range:new eQ.Uniform(null)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tn,vertexShader:eX}),this.colorOutput=e,this.luminanceRange=t}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get threshold(){return this.uniforms.threshold.value}set threshold(e){this.smoothing>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.threshold.value=e}getThreshold(){return this.threshold}setThreshold(e){this.threshold=e}get smoothing(){return this.uniforms.smoothing.value}set smoothing(e){this.threshold>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.smoothing.value=e}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(e){this.smoothing=e}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(e){}get colorOutput(){return void 0!==this.defines.COLOR}set colorOutput(e){e?this.defines.COLOR="1":delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(e){return this.colorOutput}setColorOutputEnabled(e){this.colorOutput=e}get useRange(){return null!==this.luminanceRange}set useRange(e){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(e){null!==e?this.defines.RANGE="1":delete this.defines.RANGE,this.uniforms.range.value=e,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(e){this.luminanceRange=e}},tl=class extends eW{constructor({renderTarget:e,luminanceRange:t,colorOutput:r,resolutionScale:a=1,width:i=e8.AUTO_SIZE,height:s=e8.AUTO_SIZE,resolutionX:n=i,resolutionY:o=s}={}){super("LuminancePass"),this.fullscreenMaterial=new to(r,t),this.needsSwap=!1,this.renderTarget=e,void 0===this.renderTarget&&(this.renderTarget=new eQ.WebGLRenderTarget(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="LuminancePass.Target");const l=this.resolution=new e8(this,n,o,a);l.addEventListener("change",e=>this.setSize(l.baseWidth,l.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(e,t,r,a,i){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let r=this.resolution;r.setBaseSize(e,t),this.renderTarget.setSize(r.width,r.height)}initialize(e,t,r){void 0!==r&&r!==eQ.UnsignedByteType&&(this.renderTarget.texture.type=r,this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},tc=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
175
|
+
uniform mediump sampler2D inputBuffer;
|
|
176
|
+
#else
|
|
177
|
+
uniform lowp sampler2D inputBuffer;
|
|
178
|
+
#endif
|
|
179
|
+
#define WEIGHT_INNER 0.125
|
|
180
|
+
#define WEIGHT_OUTER 0.05556
|
|
181
|
+
varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;float clampToBorder(const in vec2 uv){return float(uv.s>=0.0&&uv.s<=1.0&&uv.t>=0.0&&uv.t<=1.0);}void main(){vec4 c=vec4(0.0);vec4 w=WEIGHT_INNER*vec4(clampToBorder(vUv00),clampToBorder(vUv01),clampToBorder(vUv02),clampToBorder(vUv03));c+=w.x*texture2D(inputBuffer,vUv00);c+=w.y*texture2D(inputBuffer,vUv01);c+=w.z*texture2D(inputBuffer,vUv02);c+=w.w*texture2D(inputBuffer,vUv03);w=WEIGHT_OUTER*vec4(clampToBorder(vUv04),clampToBorder(vUv05),clampToBorder(vUv06),clampToBorder(vUv07));c+=w.x*texture2D(inputBuffer,vUv04);c+=w.y*texture2D(inputBuffer,vUv05);c+=w.z*texture2D(inputBuffer,vUv06);c+=w.w*texture2D(inputBuffer,vUv07);w=WEIGHT_OUTER*vec4(clampToBorder(vUv08),clampToBorder(vUv09),clampToBorder(vUv10),clampToBorder(vUv11));c+=w.x*texture2D(inputBuffer,vUv08);c+=w.y*texture2D(inputBuffer,vUv09);c+=w.z*texture2D(inputBuffer,vUv10);c+=w.w*texture2D(inputBuffer,vUv11);c+=WEIGHT_OUTER*texture2D(inputBuffer,vUv);gl_FragColor=c;
|
|
182
|
+
#include <colorspace_fragment>
|
|
183
|
+
}`,tu=class extends eQ.ShaderMaterial{constructor(){super({name:"DownsamplingMaterial",uniforms:{inputBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(new eQ.Vector2)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tc,vertexShader:"uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;void main(){vUv=position.xy*0.5+0.5;vUv00=vUv+texelSize*vec2(-1.0,1.0);vUv01=vUv+texelSize*vec2(1.0,1.0);vUv02=vUv+texelSize*vec2(-1.0,-1.0);vUv03=vUv+texelSize*vec2(1.0,-1.0);vUv04=vUv+texelSize*vec2(-2.0,2.0);vUv05=vUv+texelSize*vec2(0.0,2.0);vUv06=vUv+texelSize*vec2(2.0,2.0);vUv07=vUv+texelSize*vec2(-2.0,0.0);vUv08=vUv+texelSize*vec2(2.0,0.0);vUv09=vUv+texelSize*vec2(-2.0,-2.0);vUv10=vUv+texelSize*vec2(0.0,-2.0);vUv11=vUv+texelSize*vec2(2.0,-2.0);gl_Position=vec4(position.xy,1.0,1.0);}"})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},tf=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
184
|
+
uniform mediump sampler2D inputBuffer;uniform mediump sampler2D supportBuffer;
|
|
185
|
+
#else
|
|
186
|
+
uniform lowp sampler2D inputBuffer;uniform lowp sampler2D supportBuffer;
|
|
187
|
+
#endif
|
|
188
|
+
uniform float radius;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vec4 c=vec4(0.0);c+=texture2D(inputBuffer,vUv0)*0.0625;c+=texture2D(inputBuffer,vUv1)*0.125;c+=texture2D(inputBuffer,vUv2)*0.0625;c+=texture2D(inputBuffer,vUv3)*0.125;c+=texture2D(inputBuffer,vUv)*0.25;c+=texture2D(inputBuffer,vUv4)*0.125;c+=texture2D(inputBuffer,vUv5)*0.0625;c+=texture2D(inputBuffer,vUv6)*0.125;c+=texture2D(inputBuffer,vUv7)*0.0625;vec4 baseColor=texture2D(supportBuffer,vUv);gl_FragColor=mix(baseColor,c,radius);
|
|
189
|
+
#include <colorspace_fragment>
|
|
190
|
+
}`,td=class extends eQ.ShaderMaterial{constructor(){super({name:"UpsamplingMaterial",uniforms:{inputBuffer:new eQ.Uniform(null),supportBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(new eQ.Vector2),radius:new eQ.Uniform(.85)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tf,vertexShader:"uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,1.0);vUv1=vUv+texelSize*vec2(0.0,1.0);vUv2=vUv+texelSize*vec2(1.0,1.0);vUv3=vUv+texelSize*vec2(-1.0,0.0);vUv4=vUv+texelSize*vec2(1.0,0.0);vUv5=vUv+texelSize*vec2(-1.0,-1.0);vUv6=vUv+texelSize*vec2(0.0,-1.0);vUv7=vUv+texelSize*vec2(1.0,-1.0);gl_Position=vec4(position.xy,1.0,1.0);}"})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}set supportBuffer(e){this.uniforms.supportBuffer.value=e}get radius(){return this.uniforms.radius.value}set radius(e){this.uniforms.radius.value=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},th=class extends eW{constructor(){super("MipmapBlurPass"),this.needsSwap=!1,this.renderTarget=new eQ.WebGLRenderTarget(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="Upsampling.Mipmap0",this.downsamplingMipmaps=[],this.upsamplingMipmaps=[],this.downsamplingMaterial=new tu,this.upsamplingMaterial=new td,this.resolution=new eQ.Vector2}get texture(){return this.renderTarget.texture}get levels(){return this.downsamplingMipmaps.length}set levels(e){if(this.levels!==e){let t=this.renderTarget;this.dispose(),this.downsamplingMipmaps=[],this.upsamplingMipmaps=[];for(let r=0;r<e;++r){let e=t.clone();e.texture.name="Downsampling.Mipmap"+r,this.downsamplingMipmaps.push(e)}this.upsamplingMipmaps.push(t);for(let r=1,a=e-1;r<a;++r){let e=t.clone();e.texture.name="Upsampling.Mipmap"+r,this.upsamplingMipmaps.push(e)}this.setSize(this.resolution.x,this.resolution.y)}}get radius(){return this.upsamplingMaterial.radius}set radius(e){this.upsamplingMaterial.radius=e}render(e,t,r,a,i){let{scene:s,camera:n}=this,{downsamplingMaterial:o,upsamplingMaterial:l}=this,{downsamplingMipmaps:c,upsamplingMipmaps:u}=this,f=t;this.fullscreenMaterial=o;for(let t=0,r=c.length;t<r;++t){let r=c[t];o.setSize(f.width,f.height),o.inputBuffer=f.texture,e.setRenderTarget(r),e.render(s,n),f=r}this.fullscreenMaterial=l;for(let t=u.length-1;t>=0;--t){let r=u[t];l.setSize(f.width,f.height),l.inputBuffer=f.texture,l.supportBuffer=c[t].texture,e.setRenderTarget(r),e.render(s,n),f=r}}setSize(e,t){let r=this.resolution;r.set(e,t);let a=r.width,i=r.height;for(let e=0,t=this.downsamplingMipmaps.length;e<t;++e)a=Math.round(.5*a),i=Math.round(.5*i),this.downsamplingMipmaps[e].setSize(a,i),e<this.upsamplingMipmaps.length&&this.upsamplingMipmaps[e].setSize(a,i)}initialize(e,t,r){if(void 0!==r){let t=this.downsamplingMipmaps.concat(this.upsamplingMipmaps);for(let e of t)e.texture.type=r;if(r!==eQ.UnsignedByteType)this.downsamplingMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1",this.upsamplingMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1";else if(null!==e&&e.outputColorSpace===eQ.SRGBColorSpace)for(let e of t)e.texture.colorSpace=eQ.SRGBColorSpace}}dispose(){for(let e of(super.dispose(),this.downsamplingMipmaps.concat(this.upsamplingMipmaps)))e.dispose()}},tp=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
191
|
+
uniform mediump sampler2D map;
|
|
192
|
+
#else
|
|
193
|
+
uniform lowp sampler2D map;
|
|
194
|
+
#endif
|
|
195
|
+
uniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=texture2D(map,uv)*intensity;}`,tm=class extends tt{constructor({blendFunction:e=28,luminanceThreshold:t=1,luminanceSmoothing:r=.03,mipmapBlur:a=!0,intensity:i=1,radius:s=.85,levels:n=8,kernelSize:o=3,resolutionScale:l=.5,width:c=e8.AUTO_SIZE,height:u=e8.AUTO_SIZE,resolutionX:f=c,resolutionY:d=u}={}){super("BloomEffect",tp,{blendFunction:e,uniforms:new Map([["map",new eQ.Uniform(null)],["intensity",new eQ.Uniform(i)]])}),this.renderTarget=new eQ.WebGLRenderTarget(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="Bloom.Target",this.blurPass=new ts({kernelSize:o}),this.luminancePass=new tl({colorOutput:!0}),this.luminanceMaterial.threshold=t,this.luminanceMaterial.smoothing=r,this.mipmapBlurPass=new th,this.mipmapBlurPass.enabled=a,this.mipmapBlurPass.radius=s,this.mipmapBlurPass.levels=n,this.uniforms.get("map").value=a?this.mipmapBlurPass.texture:this.renderTarget.texture;const h=this.resolution=new e8(this,f,d,l);h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.mipmapBlurPass.enabled?this.mipmapBlurPass.texture:this.renderTarget.texture}getTexture(){return this.texture}getResolution(){return this.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get distinction(){return console.warn(this.name,"distinction was removed"),1}set distinction(e){console.warn(this.name,"distinction was removed")}get intensity(){return this.uniforms.get("intensity").value}set intensity(e){this.uniforms.get("intensity").value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}update(e,t,r){let a=this.renderTarget,i=this.luminancePass;i.enabled?(i.render(e,t),this.mipmapBlurPass.enabled?this.mipmapBlurPass.render(e,i.renderTarget):this.blurPass.render(e,i.renderTarget,a)):this.mipmapBlurPass.enabled?this.mipmapBlurPass.render(e,t):this.blurPass.render(e,t,a)}setSize(e,t){let r=this.resolution;r.setBaseSize(e,t),this.renderTarget.setSize(r.width,r.height),this.blurPass.resolution.copy(r),this.luminancePass.setSize(e,t),this.mipmapBlurPass.setSize(e,t)}initialize(e,t,r){this.blurPass.initialize(e,t,r),this.luminancePass.initialize(e,t,r),this.mipmapBlurPass.initialize(e,t,r),void 0!==r&&(this.renderTarget.texture.type=r,null!==e&&e.outputColorSpace===eQ.SRGBColorSpace&&(this.renderTarget.texture.colorSpace=eQ.SRGBColorSpace))}},tg=`#ifdef RADIAL_MODULATION
|
|
196
|
+
uniform float modulationOffset;
|
|
197
|
+
#endif
|
|
198
|
+
varying float vActive;varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=inputColor.ra;vec2 ba=inputColor.ba;
|
|
199
|
+
#ifdef RADIAL_MODULATION
|
|
200
|
+
const vec2 center=vec2(0.5);float d=distance(uv,center)*2.0;d=max(d-modulationOffset,0.0);if(vActive>0.0&&d>0.0){ra=texture2D(inputBuffer,mix(uv,vUvR,d)).ra;ba=texture2D(inputBuffer,mix(uv,vUvB,d)).ba;}
|
|
201
|
+
#else
|
|
202
|
+
if(vActive>0.0){ra=texture2D(inputBuffer,vUvR).ra;ba=texture2D(inputBuffer,vUvB).ba;}
|
|
203
|
+
#endif
|
|
204
|
+
outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}`,tv=`void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){
|
|
205
|
+
#ifdef INVERTED
|
|
206
|
+
vec3 color=vec3(1.0-depth);
|
|
207
|
+
#else
|
|
208
|
+
vec3 color=vec3(depth);
|
|
209
|
+
#endif
|
|
210
|
+
outputColor=vec4(color,inputColor.a);}`,tx=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
211
|
+
uniform mediump sampler2D inputBuffer;
|
|
212
|
+
#else
|
|
213
|
+
uniform lowp sampler2D inputBuffer;
|
|
214
|
+
#endif
|
|
215
|
+
#if PASS == 1
|
|
216
|
+
uniform vec4 kernel64[32];
|
|
217
|
+
#else
|
|
218
|
+
uniform vec4 kernel16[8];
|
|
219
|
+
#endif
|
|
220
|
+
uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;varying vec2 vUv;void main(){
|
|
221
|
+
#ifdef FOREGROUND
|
|
222
|
+
vec2 cocNearFar=texture2D(cocBuffer,vUv).rg*scale;float coc=cocNearFar.x;
|
|
223
|
+
#else
|
|
224
|
+
float coc=texture2D(cocBuffer,vUv).g*scale;
|
|
225
|
+
#endif
|
|
226
|
+
if(coc==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{
|
|
227
|
+
#ifdef FOREGROUND
|
|
228
|
+
vec2 step=texelSize*max(cocNearFar.x,cocNearFar.y);
|
|
229
|
+
#else
|
|
230
|
+
vec2 step=texelSize*coc;
|
|
231
|
+
#endif
|
|
232
|
+
#if PASS == 1
|
|
233
|
+
vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0;
|
|
234
|
+
#else
|
|
235
|
+
vec4 maxValue=texture2D(inputBuffer,vUv);for(int i=0;i<8;++i){vec4 kernel=kernel16[i];vec2 uv=step*kernel.xy+vUv;maxValue=max(texture2D(inputBuffer,uv),maxValue);uv=step*kernel.zw+vUv;maxValue=max(texture2D(inputBuffer,uv),maxValue);}gl_FragColor=maxValue;
|
|
236
|
+
#endif
|
|
237
|
+
}}`,tA=class extends eQ.ShaderMaterial{constructor(e=!1,t=!1){super({name:"BokehMaterial",defines:{PASS:e?"2":"1"},uniforms:{inputBuffer:new eQ.Uniform(null),cocBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(new eQ.Vector2),kernel64:new eQ.Uniform(null),kernel16:new eQ.Uniform(null),scale:new eQ.Uniform(1)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tx,vertexShader:eX}),t&&(this.defines.FOREGROUND="1"),this.generateKernel()}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set cocBuffer(e){this.uniforms.cocBuffer.value=e}setCoCBuffer(e){this.uniforms.cocBuffer.value=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(e){return this.scale}setScale(e){this.scale=e}generateKernel(){let e=new Float64Array(128),t=new Float64Array(32),r=0,a=0;for(let i=0,s=Math.sqrt(80);i<80;++i){let n=2.39996323*i,o=Math.sqrt(i)/s,l=o*Math.cos(n),c=o*Math.sin(n);i%5==0?(t[a++]=l,t[a++]=c):(e[r++]=l,e[r++]=c)}this.uniforms.kernel64.value=e,this.uniforms.kernel16.value=t}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},tD=`#include <common>
|
|
238
|
+
#include <packing>
|
|
239
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
240
|
+
uniform highp sampler2D depthBuffer;
|
|
241
|
+
#else
|
|
242
|
+
uniform mediump sampler2D depthBuffer;
|
|
243
|
+
#endif
|
|
244
|
+
uniform mat4 projectionMatrix;uniform mat4 projectionMatrixInverse;uniform float cameraNear;uniform float cameraFar;uniform float focusDistance;uniform float focusRange;varying vec2 vUv;float readDepth(const in vec2 uv){
|
|
245
|
+
#if DEPTH_PACKING == 3201
|
|
246
|
+
float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
247
|
+
#else
|
|
248
|
+
float depth=texture2D(depthBuffer,uv).r;
|
|
249
|
+
#endif
|
|
250
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
251
|
+
float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d;
|
|
252
|
+
#elif defined(USE_REVERSED_DEPTH_BUFFER)
|
|
253
|
+
depth=1.0-depth;
|
|
254
|
+
#endif
|
|
255
|
+
return depth;}
|
|
256
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
257
|
+
#define getViewZ(depth) perspectiveDepthToViewZ(depth, cameraNear, cameraFar)
|
|
258
|
+
#else
|
|
259
|
+
#define getViewZ(depth) orthographicDepthToViewZ(depth, cameraNear, cameraFar)
|
|
260
|
+
#endif
|
|
261
|
+
vec3 getViewPosition(const in vec2 screenPosition,const in float depth,const in float viewZ){vec4 clipPosition=vec4(vec3(screenPosition,depth)*2.0-1.0,1.0);float clipW=projectionMatrix[2][3]*viewZ+projectionMatrix[3][3];clipPosition*=clipW;return(projectionMatrixInverse*clipPosition).xyz;}vec3 getViewPosition(const in vec2 screenPosition,const in float depth){return getViewPosition(screenPosition,depth,getViewZ(depth));}
|
|
262
|
+
#define getDistance(viewPosition) length(viewPosition)
|
|
263
|
+
void main(){float depth=readDepth(vUv);vec3 viewPosition=getViewPosition(vUv,depth);float distance=getDistance(viewPosition);float signedDistance=distance-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,tw=class extends eQ.ShaderMaterial{constructor(e=null){super({name:"CircleOfConfusionMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new eQ.Uniform(null),projectionMatrix:new eQ.Uniform(null),projectionMatrixInverse:new eQ.Uniform(null),cameraNear:new eQ.Uniform(.3),cameraFar:new eQ.Uniform(1e3),focusDistance:new eQ.Uniform(0),focusRange:new eQ.Uniform(0)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tD,vertexShader:eX}),this.uniforms.focalLength=this.uniforms.focusRange,null!==e&&this.copyCameraSettings(e)}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.BasicDepthPacking){this.depthBuffer=e,this.depthPacking=t}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(e){this.uniforms.focusDistance.value=e}get worldFocusDistance(){return this.focusDistance}set worldFocusDistance(e){this.focusDistance=e}getFocusDistance(e){this.uniforms.focusDistance.value=e}setFocusDistance(e){this.uniforms.focusDistance.value=e}get focalLength(){return this.focusRange}set focalLength(e){this.focusRange=e}get focusRange(){return this.uniforms.focusRange.value}set focusRange(e){this.uniforms.focusRange.value=e}get worldFocusRange(){return this.focusRange}set worldFocusRange(e){this.focusRange=e}getFocalLength(e){return this.focusRange}setFocalLength(e){this.focusRange=e}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){this.uniforms.projectionMatrix.value=e.projectionMatrix,this.uniforms.projectionMatrixInverse.value=e.projectionMatrixInverse,this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far;let t=void 0!==this.defines.PERSPECTIVE_CAMERA;e instanceof eQ.PerspectiveCamera?t||(this.defines.PERSPECTIVE_CAMERA=!0,this.needsUpdate=!0):t&&(delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},tS=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
264
|
+
uniform mediump sampler2D inputBuffer;
|
|
265
|
+
#else
|
|
266
|
+
uniform lowp sampler2D inputBuffer;
|
|
267
|
+
#endif
|
|
268
|
+
#ifdef MASK_PRECISION_HIGH
|
|
269
|
+
uniform mediump sampler2D maskTexture;
|
|
270
|
+
#else
|
|
271
|
+
uniform lowp sampler2D maskTexture;
|
|
272
|
+
#endif
|
|
273
|
+
#if MASK_FUNCTION != 0
|
|
274
|
+
uniform float strength;
|
|
275
|
+
#endif
|
|
276
|
+
varying vec2 vUv;void main(){
|
|
277
|
+
#if COLOR_CHANNEL == 0
|
|
278
|
+
float mask=texture2D(maskTexture,vUv).r;
|
|
279
|
+
#elif COLOR_CHANNEL == 1
|
|
280
|
+
float mask=texture2D(maskTexture,vUv).g;
|
|
281
|
+
#elif COLOR_CHANNEL == 2
|
|
282
|
+
float mask=texture2D(maskTexture,vUv).b;
|
|
283
|
+
#else
|
|
284
|
+
float mask=texture2D(maskTexture,vUv).a;
|
|
285
|
+
#endif
|
|
286
|
+
#if MASK_FUNCTION == 0
|
|
287
|
+
#ifdef INVERTED
|
|
288
|
+
mask=(mask>0.0)?0.0:1.0;
|
|
289
|
+
#else
|
|
290
|
+
mask=(mask>0.0)?1.0:0.0;
|
|
291
|
+
#endif
|
|
292
|
+
#else
|
|
293
|
+
mask=clamp(mask*strength,0.0,1.0);
|
|
294
|
+
#ifdef INVERTED
|
|
295
|
+
mask=1.0-mask;
|
|
296
|
+
#endif
|
|
297
|
+
#endif
|
|
298
|
+
#if MASK_FUNCTION == 3
|
|
299
|
+
vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=vec4(mask*texel.rgb,texel.a);
|
|
300
|
+
#elif MASK_FUNCTION == 2
|
|
301
|
+
gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask);
|
|
302
|
+
#else
|
|
303
|
+
gl_FragColor=mask*texture2D(inputBuffer,vUv);
|
|
304
|
+
#endif
|
|
305
|
+
}`,ty=class extends eQ.ShaderMaterial{constructor(e=null){super({name:"MaskMaterial",uniforms:{maskTexture:new eQ.Uniform(e),inputBuffer:new eQ.Uniform(null),strength:new eQ.Uniform(1)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tS,vertexShader:eX}),this.colorChannel=0,this.maskFunction=0}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set maskTexture(e){this.uniforms.maskTexture.value=e,delete this.defines.MASK_PRECISION_HIGH,e.type!==eQ.UnsignedByteType&&(this.defines.MASK_PRECISION_HIGH="1"),this.needsUpdate=!0}setMaskTexture(e){this.maskTexture=e}set colorChannel(e){this.defines.COLOR_CHANNEL=e.toFixed(0),this.needsUpdate=!0}setColorChannel(e){this.colorChannel=e}set maskFunction(e){this.defines.MASK_FUNCTION=e.toFixed(0),this.needsUpdate=!0}setMaskFunction(e){this.maskFunction=e}get inverted(){return void 0!==this.defines.INVERTED}set inverted(e){this.inverted&&!e?delete this.defines.INVERTED:e&&(this.defines.INVERTED="1"),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get strength(){return this.uniforms.strength.value}set strength(e){this.uniforms.strength.value=e}getStrength(){return this.strength}setStrength(e){this.strength=e}},tT=class extends eW{constructor(e,t="inputBuffer"){super("ShaderPass"),this.fullscreenMaterial=e,this.input=t}setInput(e){this.input=e}render(e,t,r,a,i){let s=this.fullscreenMaterial.uniforms;null!==t&&void 0!==s&&void 0!==s[this.input]&&(s[this.input].value=t.texture),e.setRenderTarget(this.renderToScreen?null:r),e.render(this.scene,this.camera)}initialize(e,t,r){void 0!==r&&r!==eQ.UnsignedByteType&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},tC=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
306
|
+
uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer;
|
|
307
|
+
#else
|
|
308
|
+
uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer;
|
|
309
|
+
#endif
|
|
310
|
+
#if MASK_FUNCTION != 1 && MASK_FUNCTION != 2
|
|
311
|
+
uniform lowp sampler2D farCoCBuffer;
|
|
312
|
+
#endif
|
|
313
|
+
uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv);
|
|
314
|
+
#if MASK_FUNCTION == 1 || MASK_FUNCTION == 2
|
|
315
|
+
vec2 cocNearFar=vec2(texture2D(nearCoCBuffer,uv).r,colorFar.a);cocNearFar.x=min(cocNearFar.x*scale,1.0);
|
|
316
|
+
#else
|
|
317
|
+
vec2 cocNearFar=vec2(texture2D(nearCoCBuffer,uv).r,texture2D(farCoCBuffer,uv).g);cocNearFar=min(cocNearFar*scale,1.0);colorFar.a*=cocNearFar.y;
|
|
318
|
+
#endif
|
|
319
|
+
vec4 result=inputColor*(1.0-cocNearFar.y)+colorFar;result=mix(result,colorNear,cocNearFar.x);outputColor=result;}`,tB=new eQ.Vector3,tE=class extends tt{constructor(e,{blendFunction:t,worldFocusDistance:r,worldFocusRange:a,focalLength:i,focusDistance:s=r||3,focusRange:n=a||i||2,bokehScale:o=1,resolutionScale:l=.5,width:c,height:u,resolutionX:f=c||e8.AUTO_SIZE,resolutionY:d=u||e8.AUTO_SIZE}={}){super("DepthOfFieldEffect",tC,{blendFunction:t,attributes:1,uniforms:new Map([["nearColorBuffer",new eQ.Uniform(null)],["farColorBuffer",new eQ.Uniform(null)],["nearCoCBuffer",new eQ.Uniform(null)],["farCoCBuffer",new eQ.Uniform(null)],["scale",new eQ.Uniform(1)]])}),this.camera=e,this.renderTarget=new eQ.WebGLRenderTarget(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="DoF.Intermediate",this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name="DoF.Masked.Far",this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name="DoF.Bokeh.Near",this.uniforms.get("nearColorBuffer").value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name="DoF.Bokeh.Far",this.uniforms.get("farColorBuffer").value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name="DoF.CoC",this.uniforms.get("farCoCBuffer").value=this.renderTargetCoC.texture,this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name="DoF.CoC.Blurred",this.uniforms.get("nearCoCBuffer").value=this.renderTargetCoCBlurred.texture,this.cocPass=new tT(new tw(e));const h=this.cocMaterial;h.focusDistance=s,h.focusRange=n,this.blurPass=new ts({resolutionScale:l,resolutionX:f,resolutionY:d,kernelSize:2}),this.maskPass=new tT(new ty(this.renderTargetCoC.texture)),this.maskPass.fullscreenMaterial.colorChannel=1,this.maskFunction=3,this.bokehNearBasePass=new tT(new tA(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new tT(new tA(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new tT(new tA(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new tT(new tA(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null;const p=this.resolution=new e8(this,f,d,l);p.addEventListener("change",e=>this.setSize(p.baseWidth,p.baseHeight)),this.bokehScale=o}set mainCamera(e){this.camera=e,this.cocMaterial.copyCameraSettings(e)}get cocTexture(){return this.renderTargetCoC.texture}get maskFunction(){return this.maskPass.fullscreenMaterial.maskFunction}set maskFunction(e){this.maskFunction!==e&&(this.defines.set("MASK_FUNCTION",e.toFixed(0)),this.maskPass.fullscreenMaterial.maskFunction=e,this.setChanged())}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.cocMaterial}getBlurPass(){return this.blurPass}getResolution(){return this.resolution}get bokehScale(){return this.uniforms.get("scale").value}set bokehScale(e){this.bokehNearBasePass.fullscreenMaterial.scale=e,this.bokehNearFillPass.fullscreenMaterial.scale=e,this.bokehFarBasePass.fullscreenMaterial.scale=e,this.bokehFarFillPass.fullscreenMaterial.scale=e,this.maskPass.fullscreenMaterial.strength=e,this.uniforms.get("scale").value=e}getBokehScale(){return this.bokehScale}setBokehScale(e){this.bokehScale=e}getTarget(){return this.target}setTarget(e){this.target=e}calculateFocusDistance(e){return this.camera.getWorldPosition(tB).distanceTo(e)}setDepthTexture(e,t=eQ.BasicDepthPacking){this.cocMaterial.depthBuffer=e,this.cocMaterial.depthPacking=t}update(e,t,r){let a=this.renderTarget,i=this.renderTargetCoC,s=this.renderTargetCoCBlurred,n=this.renderTargetMasked;if(null!==this.target){let e=this.calculateFocusDistance(this.target);this.cocMaterial.focusDistance=e}this.cocPass.render(e,null,i),this.blurPass.render(e,i,s),this.maskPass.render(e,t,n),this.bokehFarBasePass.render(e,n,a),this.bokehFarFillPass.render(e,a,this.renderTargetFar),this.bokehNearBasePass.render(e,t,a),this.bokehNearFillPass.render(e,a,this.renderTargetNear)}setSize(e,t){let r=this.resolution;r.setBaseSize(e,t);let a=r.width,i=r.height;this.cocPass.setSize(e,t),this.blurPass.setSize(e,t),this.maskPass.setSize(e,t),this.renderTargetFar.setSize(e,t),this.renderTargetCoC.setSize(e,t),this.renderTargetMasked.setSize(e,t),this.renderTarget.setSize(a,i),this.renderTargetNear.setSize(a,i),this.renderTargetCoCBlurred.setSize(a,i),this.bokehNearBasePass.fullscreenMaterial.setSize(e,t),this.bokehNearFillPass.fullscreenMaterial.setSize(e,t),this.bokehFarBasePass.fullscreenMaterial.setSize(e,t),this.bokehFarFillPass.fullscreenMaterial.setSize(e,t)}initialize(e,t,r){this.cocPass.initialize(e,t,r),this.maskPass.initialize(e,t,r),this.bokehNearBasePass.initialize(e,t,r),this.bokehNearFillPass.initialize(e,t,r),this.bokehFarBasePass.initialize(e,t,r),this.bokehFarFillPass.initialize(e,t,r),this.blurPass.initialize(e,t,eQ.UnsignedByteType),e.capabilities.logarithmicDepthBuffer&&(this.cocPass.fullscreenMaterial.defines.LOG_DEPTH="1"),void 0!==r&&(this.renderTarget.texture.type=r,this.renderTargetNear.texture.type=r,this.renderTargetFar.texture.type=r,this.renderTargetMasked.texture.type=r,null!==e&&e.outputColorSpace===eQ.SRGBColorSpace&&(this.renderTarget.texture.colorSpace=eQ.SRGBColorSpace,this.renderTargetNear.texture.colorSpace=eQ.SRGBColorSpace,this.renderTargetFar.texture.colorSpace=eQ.SRGBColorSpace,this.renderTargetMasked.texture.colorSpace=eQ.SRGBColorSpace))}},tM=`#define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5))
|
|
320
|
+
#define ONE_OVER_TWELVE 0.08333333333333333
|
|
321
|
+
varying vec2 vUvDown;varying vec2 vUvUp;varying vec2 vUvLeft;varying vec2 vUvRight;varying vec2 vUvDownLeft;varying vec2 vUvUpRight;varying vec2 vUvUpLeft;varying vec2 vUvDownRight;vec4 fxaa(const in vec4 inputColor,const in vec2 uv){float lumaCenter=luminance(inputColor.rgb);float lumaDown=luminance(texture2D(inputBuffer,vUvDown).rgb);float lumaUp=luminance(texture2D(inputBuffer,vUvUp).rgb);float lumaLeft=luminance(texture2D(inputBuffer,vUvLeft).rgb);float lumaRight=luminance(texture2D(inputBuffer,vUvRight).rgb);float lumaMin=min(lumaCenter,min(min(lumaDown,lumaUp),min(lumaLeft,lumaRight)));float lumaMax=max(lumaCenter,max(max(lumaDown,lumaUp),max(lumaLeft,lumaRight)));float lumaRange=lumaMax-lumaMin;if(lumaRange<max(EDGE_THRESHOLD_MIN,lumaMax*EDGE_THRESHOLD_MAX)){return inputColor;}float lumaDownLeft=luminance(texture2D(inputBuffer,vUvDownLeft).rgb);float lumaUpRight=luminance(texture2D(inputBuffer,vUvUpRight).rgb);float lumaUpLeft=luminance(texture2D(inputBuffer,vUvUpLeft).rgb);float lumaDownRight=luminance(texture2D(inputBuffer,vUvDownRight).rgb);float lumaDownUp=lumaDown+lumaUp;float lumaLeftRight=lumaLeft+lumaRight;float lumaLeftCorners=lumaDownLeft+lumaUpLeft;float lumaDownCorners=lumaDownLeft+lumaDownRight;float lumaRightCorners=lumaDownRight+lumaUpRight;float lumaUpCorners=lumaUpRight+lumaUpLeft;float edgeHorizontal=(abs(-2.0*lumaLeft+lumaLeftCorners)+abs(-2.0*lumaCenter+lumaDownUp)*2.0+abs(-2.0*lumaRight+lumaRightCorners));float edgeVertical=(abs(-2.0*lumaUp+lumaUpCorners)+abs(-2.0*lumaCenter+lumaLeftRight)*2.0+abs(-2.0*lumaDown+lumaDownCorners));bool isHorizontal=(edgeHorizontal>=edgeVertical);float stepLength=isHorizontal?texelSize.y:texelSize.x;float luma1=isHorizontal?lumaDown:lumaLeft;float luma2=isHorizontal?lumaUp:lumaRight;float gradient1=abs(luma1-lumaCenter);float gradient2=abs(luma2-lumaCenter);bool is1Steepest=gradient1>=gradient2;float gradientScaled=0.25*max(gradient1,gradient2);float lumaLocalAverage=0.0;if(is1Steepest){stepLength=-stepLength;lumaLocalAverage=0.5*(luma1+lumaCenter);}else{lumaLocalAverage=0.5*(luma2+lumaCenter);}vec2 currentUv=uv;if(isHorizontal){currentUv.y+=stepLength*0.5;}else{currentUv.x+=stepLength*0.5;}vec2 offset=isHorizontal?vec2(texelSize.x,0.0):vec2(0.0,texelSize.y);vec2 uv1=currentUv-offset*QUALITY(0);vec2 uv2=currentUv+offset*QUALITY(0);float lumaEnd1=luminance(texture2D(inputBuffer,uv1).rgb);float lumaEnd2=luminance(texture2D(inputBuffer,uv2).rgb);lumaEnd1-=lumaLocalAverage;lumaEnd2-=lumaLocalAverage;bool reached1=abs(lumaEnd1)>=gradientScaled;bool reached2=abs(lumaEnd2)>=gradientScaled;bool reachedBoth=reached1&&reached2;if(!reached1){uv1-=offset*QUALITY(1);}if(!reached2){uv2+=offset*QUALITY(1);}if(!reachedBoth){for(int i=2;i<SAMPLES;++i){if(!reached1){lumaEnd1=luminance(texture2D(inputBuffer,uv1).rgb);lumaEnd1=lumaEnd1-lumaLocalAverage;}if(!reached2){lumaEnd2=luminance(texture2D(inputBuffer,uv2).rgb);lumaEnd2=lumaEnd2-lumaLocalAverage;}reached1=abs(lumaEnd1)>=gradientScaled;reached2=abs(lumaEnd2)>=gradientScaled;reachedBoth=reached1&&reached2;if(!reached1){uv1-=offset*QUALITY(i);}if(!reached2){uv2+=offset*QUALITY(i);}if(reachedBoth){break;}}}float distance1=isHorizontal?(uv.x-uv1.x):(uv.y-uv1.y);float distance2=isHorizontal?(uv2.x-uv.x):(uv2.y-uv.y);bool isDirection1=distance1<distance2;float distanceFinal=min(distance1,distance2);float edgeThickness=(distance1+distance2);bool isLumaCenterSmaller=lumaCenter<lumaLocalAverage;bool correctVariation1=(lumaEnd1<0.0)!=isLumaCenterSmaller;bool correctVariation2=(lumaEnd2<0.0)!=isLumaCenterSmaller;bool correctVariation=isDirection1?correctVariation1:correctVariation2;float pixelOffset=-distanceFinal/edgeThickness+0.5;float finalOffset=correctVariation?pixelOffset:0.0;float lumaAverage=ONE_OVER_TWELVE*(2.0*(lumaDownUp+lumaLeftRight)+lumaLeftCorners+lumaRightCorners);float subPixelOffset1=clamp(abs(lumaAverage-lumaCenter)/lumaRange,0.0,1.0);float subPixelOffset2=(-2.0*subPixelOffset1+3.0)*subPixelOffset1*subPixelOffset1;float subPixelOffsetFinal=subPixelOffset2*subPixelOffset2*SUBPIXEL_QUALITY;finalOffset=max(finalOffset,subPixelOffsetFinal);vec2 finalUv=uv;if(isHorizontal){finalUv.y+=finalOffset*stepLength;}else{finalUv.x+=finalOffset*stepLength;}return texture2D(inputBuffer,finalUv);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=fxaa(inputColor,uv);}`,tb=class extends eQ.DataTexture{constructor(e,t,r=eQ.RedFormat,a=eQ.UnsignedByteType){super(function(e,t,r){let a,i=new Map([[eQ.RedFormat,1],[eQ.RGFormat,2],[eQ.RGBAFormat,4]]);if(i.has(t)||console.error("Invalid noise texture format"),r===eQ.UnsignedByteType){a=new Uint8Array(e*i.get(t));for(let e=0,t=a.length;e<t;++e)a[e]=255*Math.random()+.5}else{a=new Float32Array(e*i.get(t));for(let e=0,t=a.length;e<t;++e)a[e]=Math.random()}return a}(e*t,r,a),e,t,r,a),this.needsUpdate=!0}},tI=`#include <common>
|
|
322
|
+
#include <dithering_pars_fragment>
|
|
323
|
+
#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
324
|
+
uniform mediump sampler2D inputBuffer;
|
|
325
|
+
#else
|
|
326
|
+
uniform lowp sampler2D inputBuffer;
|
|
327
|
+
#endif
|
|
328
|
+
uniform vec2 lightPosition;uniform float exposure;uniform float decay;uniform float density;uniform float weight;uniform float clampMax;varying vec2 vUv;void main(){vec2 coord=vUv;vec2 delta=lightPosition-coord;delta*=1.0/SAMPLES_FLOAT*density;float illuminationDecay=1.0;vec4 color=vec4(0.0);for(int i=0;i<SAMPLES_INT;++i){coord+=delta;vec4 texel=texture2D(inputBuffer,coord);texel*=illuminationDecay*weight;color+=texel;illuminationDecay*=decay;}gl_FragColor=clamp(color*exposure,0.0,clampMax);
|
|
329
|
+
#include <dithering_fragment>
|
|
330
|
+
}`,tP=class extends eQ.ShaderMaterial{constructor(e){super({name:"GodRaysMaterial",defines:{SAMPLES_INT:"60",SAMPLES_FLOAT:"60.0"},uniforms:{inputBuffer:new eQ.Uniform(null),lightPosition:new eQ.Uniform(e),density:new eQ.Uniform(1),decay:new eQ.Uniform(1),weight:new eQ.Uniform(1),exposure:new eQ.Uniform(1),clampMax:new eQ.Uniform(1)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tI,vertexShader:eX})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get lightPosition(){return this.uniforms.lightPosition.value}getLightPosition(){return this.uniforms.lightPosition.value}setLightPosition(e){this.uniforms.lightPosition.value=e}get density(){return this.uniforms.density.value}set density(e){this.uniforms.density.value=e}getDensity(){return this.uniforms.density.value}setDensity(e){this.uniforms.density.value=e}get decay(){return this.uniforms.decay.value}set decay(e){this.uniforms.decay.value=e}getDecay(){return this.uniforms.decay.value}setDecay(e){this.uniforms.decay.value=e}get weight(){return this.uniforms.weight.value}set weight(e){this.uniforms.weight.value=e}getWeight(){return this.uniforms.weight.value}setWeight(e){this.uniforms.weight.value=e}get exposure(){return this.uniforms.exposure.value}set exposure(e){this.uniforms.exposure.value=e}getExposure(){return this.uniforms.exposure.value}setExposure(e){this.uniforms.exposure.value=e}get maxIntensity(){return this.uniforms.clampMax.value}set maxIntensity(e){this.uniforms.clampMax.value=e}getMaxIntensity(){return this.uniforms.clampMax.value}setMaxIntensity(e){this.uniforms.clampMax.value=e}get samples(){return Number(this.defines.SAMPLES_INT)}set samples(e){let t=Math.floor(e);this.defines.SAMPLES_INT=t.toFixed(0),this.defines.SAMPLES_FLOAT=t.toFixed(1),this.needsUpdate=!0}getSamples(){return this.samples}setSamples(e){this.samples=e}},tR=class extends eW{constructor(e,t,r=null){super("RenderPass",e,t),this.needsSwap=!1,this.needsDepthBlit=!0,this.clearPass=new e_,this.overrideMaterialManager=null===r?null:new e3(r),this.ignoreBackground=!1,this.skipShadowMapUpdate=!1,this.selection=null}set mainScene(e){this.scene=e}set mainCamera(e){this.camera=e}get renderToScreen(){return super.renderToScreen}set renderToScreen(e){super.renderToScreen=e,this.clearPass.renderToScreen=e}get overrideMaterial(){let e=this.overrideMaterialManager;return null!==e?e.material:null}set overrideMaterial(e){let t=this.overrideMaterialManager;null!==e?null!==t?t.setMaterial(e):this.overrideMaterialManager=new e3(e):null!==t&&(t.dispose(),this.overrideMaterialManager=null)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(e){this.overrideMaterial=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getSelection(){return this.selection}setSelection(e){this.selection=e}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(e){this.skipShadowMapUpdate=e}getClearPass(){return this.clearPass}render(e,t,r,a,i){let s=this.scene,n=this.camera,o=this.selection,l=n.layers.mask,c=s.background,u=e.shadowMap.autoUpdate,f=this.renderToScreen?null:t;null!==o&&n.layers.set(o.getLayer()),this.skipShadowMapUpdate&&(e.shadowMap.autoUpdate=!1),(this.ignoreBackground||null!==this.clearPass.overrideClearColor)&&(s.background=null),this.clearPass.enabled&&this.clearPass.render(e,t),e.setRenderTarget(f),null!==this.overrideMaterialManager?this.overrideMaterialManager.render(e,s,n):e.render(s,n),n.layers.mask=l,s.background=c,e.shadowMap.autoUpdate=u}},tF=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
331
|
+
uniform mediump sampler2D map;
|
|
332
|
+
#else
|
|
333
|
+
uniform lowp sampler2D map;
|
|
334
|
+
#endif
|
|
335
|
+
void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=texture2D(map,uv);}`,tU=new eQ.Vector3,tL=new eQ.Matrix4;function tG(e,t,r){let a=document.createElement("canvas"),i=a.getContext("2d");if(a.width=e,a.height=t,r instanceof Image)i.drawImage(r,0,0);else{let a=i.createImageData(e,t);a.data.set(r),i.putImageData(a,0,0)}return a}var tO=class e{constructor(e=0,t=0,r=null){this.width=e,this.height=t,this.data=r}toCanvas(){return"u"<typeof document?null:tG(this.width,this.height,this.data)}static from(t){let r,{width:a,height:i}=t;if(t instanceof Image){let e=tG(a,i,t);null!==e&&(r=e.getContext("2d").getImageData(0,0,a,i).data)}else r=t.data;return new e(a,i,r)}},tN=new eQ.Color,tH=class e extends eQ.Data3DTexture{constructor(e,t){super(e,t,t,t),this.type=eQ.FloatType,this.format=eQ.RGBAFormat,this.minFilter=eQ.LinearFilter,this.magFilter=eQ.LinearFilter,this.wrapS=eQ.ClampToEdgeWrapping,this.wrapT=eQ.ClampToEdgeWrapping,this.wrapR=eQ.ClampToEdgeWrapping,this.unpackAlignment=1,this.needsUpdate=!0,this.colorSpace=eQ.LinearSRGBColorSpace,this.domainMin=new eQ.Vector3(0,0,0),this.domainMax=new eQ.Vector3(1,1,1)}get isLookupTexture3D(){return!0}scaleUp(t,r=!0){let a=this.image;return t<=a.width?Promise.reject(Error("The target size must be greater than the current size")):new Promise((i,s)=>{let n=URL.createObjectURL(new Blob(['(()=>{var O={SCALE_UP:"lut.scaleup"};var _=[new Float32Array(3),new Float32Array(3)],n=[new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3)],Z=[[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1])]];function d(a,t,r,m){let i=r[0]-t[0],e=r[1]-t[1],y=r[2]-t[2],h=a[0]-t[0],A=a[1]-t[1],w=a[2]-t[2],c=e*w-y*A,l=y*h-i*w,x=i*A-e*h,u=Math.sqrt(c*c+l*l+x*x),b=u*.5,s=c/u,F=l/u,f=x/u,p=-(a[0]*s+a[1]*F+a[2]*f),M=m[0]*s+m[1]*F+m[2]*f;return Math.abs(M+p)*b/3}function V(a,t,r,m,i,e){let y=(r+m*t+i*t*t)*4;e[0]=a[y+0],e[1]=a[y+1],e[2]=a[y+2]}function k(a,t,r,m,i,e){let y=r*(t-1),h=m*(t-1),A=i*(t-1),w=Math.floor(y),c=Math.floor(h),l=Math.floor(A),x=Math.ceil(y),u=Math.ceil(h),b=Math.ceil(A),s=y-w,F=h-c,f=A-l;if(w===y&&c===h&&l===A)V(a,t,y,h,A,e);else{let p;s>=F&&F>=f?p=Z[0]:s>=f&&f>=F?p=Z[1]:f>=s&&s>=F?p=Z[2]:F>=s&&s>=f?p=Z[3]:F>=f&&f>=s?p=Z[4]:f>=F&&F>=s&&(p=Z[5]);let[M,g,X,Y]=p,P=_[0];P[0]=s,P[1]=F,P[2]=f;let o=_[1],L=x-w,S=u-c,U=b-l;o[0]=L*M[0]+w,o[1]=S*M[1]+c,o[2]=U*M[2]+l,V(a,t,o[0],o[1],o[2],n[0]),o[0]=L*g[0]+w,o[1]=S*g[1]+c,o[2]=U*g[2]+l,V(a,t,o[0],o[1],o[2],n[1]),o[0]=L*X[0]+w,o[1]=S*X[1]+c,o[2]=U*X[2]+l,V(a,t,o[0],o[1],o[2],n[2]),o[0]=L*Y[0]+w,o[1]=S*Y[1]+c,o[2]=U*Y[2]+l,V(a,t,o[0],o[1],o[2],n[3]);let T=d(g,X,Y,P)*6,q=d(M,X,Y,P)*6,C=d(M,g,Y,P)*6,E=d(M,g,X,P)*6;n[0][0]*=T,n[0][1]*=T,n[0][2]*=T,n[1][0]*=q,n[1][1]*=q,n[1][2]*=q,n[2][0]*=C,n[2][1]*=C,n[2][2]*=C,n[3][0]*=E,n[3][1]*=E,n[3][2]*=E,e[0]=n[0][0]+n[1][0]+n[2][0]+n[3][0],e[1]=n[0][1]+n[1][1]+n[2][1]+n[3][1],e[2]=n[0][2]+n[1][2]+n[2][2]+n[3][2]}}var v=class{static expand(t,r){let m=Math.cbrt(t.length/4),i=new Float32Array(3),e=new t.constructor(r**3*4),y=t instanceof Uint8Array?255:1,h=r**2,A=1/(r-1);for(let w=0;w<r;++w)for(let c=0;c<r;++c)for(let l=0;l<r;++l){let x=l*A,u=c*A,b=w*A,s=Math.round(l+c*r+w*h)*4;k(t,m,x,u,b,i),e[s+0]=i[0],e[s+1]=i[1],e[s+2]=i[2],e[s+3]=y}return e}};self.addEventListener("message",a=>{let t=a.data,r=t.data;t.operation===O.SCALE_UP&&(r=v.expand(r,t.size)),postMessage(r,[r.buffer]),close()});})();\n'],{type:"text/javascript"})),o=new Worker(n);o.addEventListener("error",e=>s(e.error)),o.addEventListener("message",r=>{let a=new e(r.data,t);this.colorSpace=a.colorSpace,a.type=this.type,a.name=this.name,URL.revokeObjectURL(n),i(a)});let l=r?[a.data.buffer]:[];o.postMessage({operation:"lut.scaleup",data:a.data,size:t},l)})}applyLUT(e){let t=this.image,r=e.image,a=Math.min(t.width,t.height,t.depth);if(a!==Math.min(r.width,r.height,r.depth))console.error("Size mismatch");else if(e.type!==eQ.FloatType||this.type!==eQ.FloatType)console.error("Both LUTs must be FloatType textures");else if(e.format!==eQ.RGBAFormat||this.format!==eQ.RGBAFormat)console.error("Both LUTs must be RGBA textures");else{let e=t.data,i=r.data,s=a**2,n=a-1;for(let t=0,r=a**3;t<r;++t){let r=4*t,o=4*Math.round(e[r+0]*n+e[r+1]*n*a+e[r+2]*n*s);e[r+0]=i[o+0],e[r+1]=i[o+1],e[r+2]=i[o+2]}this.needsUpdate=!0}return this}convertToUint8(){if(this.type===eQ.FloatType){let e=this.image.data,t=new Uint8Array(e.length);for(let r=0,a=e.length;r<a;++r)t[r]=255*e[r]+.5;this.image.data=t,this.type=eQ.UnsignedByteType,this.needsUpdate=!0}return this}convertToFloat(){if(this.type===eQ.UnsignedByteType){let e=this.image.data,t=new Float32Array(e.length);for(let r=0,a=e.length;r<a;++r)t[r]=e[r]/255;this.image.data=t,this.type=eQ.FloatType,this.needsUpdate=!0}return this}convertToRGBA(){return console.warn("LookupTexture","convertToRGBA() is deprecated, LUTs are now RGBA by default"),this}convertLinearToSRGB(){let e=this.image.data;if(this.type===eQ.FloatType){for(let t=0,r=e.length;t<r;t+=4)tN.fromArray(e,t).convertLinearToSRGB().toArray(e,t);this.colorSpace=eQ.SRGBColorSpace,this.needsUpdate=!0}else console.error("Color space conversion requires FloatType data");return this}convertSRGBToLinear(){let e=this.image.data;if(this.type===eQ.FloatType){for(let t=0,r=e.length;t<r;t+=4)tN.fromArray(e,t).convertSRGBToLinear().toArray(e,t);this.colorSpace=eQ.LinearSRGBColorSpace,this.needsUpdate=!0}else console.error("Color space conversion requires FloatType data");return this}toDataTexture(){let e=this.image.width,t=this.image.height*this.image.depth,r=new eQ.DataTexture(this.image.data,e,t);return r.name=this.name,r.type=this.type,r.format=this.format,r.minFilter=eQ.LinearFilter,r.magFilter=eQ.LinearFilter,r.wrapS=this.wrapS,r.wrapT=this.wrapT,r.generateMipmaps=!1,r.needsUpdate=!0,this.colorSpace=r.colorSpace,r}static from(t){let r,a=t.image,{width:i,height:s}=a,n=Math.min(i,s);if(a instanceof Image){let e=tO.from(a).data;if(i>s){r=new Uint8Array(e.length);for(let t=0;t<n;++t)for(let a=0;a<n;++a)for(let i=0;i<n;++i){let s=(i+t*n+a*n*n)*4,o=(i+a*n+t*n*n)*4;r[o+0]=e[s+0],r[o+1]=e[s+1],r[o+2]=e[s+2],r[o+3]=e[s+3]}}else r=new Uint8Array(e.buffer)}else r=a.data.slice();let o=new e(r,n);return o.type=t.type,o.name=t.name,t.colorSpace=o.colorSpace,o}static createNeutral(t){let r=new Float32Array(t**3*4),a=t**2,i=1/(t-1);for(let e=0;e<t;++e)for(let s=0;s<t;++s)for(let n=0;n<t;++n){let o=(e+s*t+n*a)*4;r[o+0]=e*i,r[o+1]=s*i,r[o+2]=n*i,r[o+3]=1}let s=new e(r,t);return s.name="neutral",s}},tz=`uniform vec3 scale;uniform vec3 offset;
|
|
336
|
+
#ifdef CUSTOM_INPUT_DOMAIN
|
|
337
|
+
uniform vec3 domainMin;uniform vec3 domainMax;
|
|
338
|
+
#endif
|
|
339
|
+
#ifdef LUT_3D
|
|
340
|
+
#ifdef LUT_PRECISION_HIGH
|
|
341
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
342
|
+
uniform highp sampler3D lut;
|
|
343
|
+
#else
|
|
344
|
+
uniform mediump sampler3D lut;
|
|
345
|
+
#endif
|
|
346
|
+
#else
|
|
347
|
+
uniform lowp sampler3D lut;
|
|
348
|
+
#endif
|
|
349
|
+
vec4 applyLUT(const in vec3 rgb){
|
|
350
|
+
#ifdef TETRAHEDRAL_INTERPOLATION
|
|
351
|
+
vec3 p=floor(rgb);vec3 f=rgb-p;vec3 v1=(p+0.5)*LUT_TEXEL_WIDTH;vec3 v4=(p+1.5)*LUT_TEXEL_WIDTH;vec3 v2,v3;vec3 frac;if(f.r>=f.g){if(f.g>f.b){frac=f.rgb;v2=vec3(v4.x,v1.y,v1.z);v3=vec3(v4.x,v4.y,v1.z);}else if(f.r>=f.b){frac=f.rbg;v2=vec3(v4.x,v1.y,v1.z);v3=vec3(v4.x,v1.y,v4.z);}else{frac=f.brg;v2=vec3(v1.x,v1.y,v4.z);v3=vec3(v4.x,v1.y,v4.z);}}else{if(f.b>f.g){frac=f.bgr;v2=vec3(v1.x,v1.y,v4.z);v3=vec3(v1.x,v4.y,v4.z);}else if(f.r>=f.b){frac=f.grb;v2=vec3(v1.x,v4.y,v1.z);v3=vec3(v4.x,v4.y,v1.z);}else{frac=f.gbr;v2=vec3(v1.x,v4.y,v1.z);v3=vec3(v1.x,v4.y,v4.z);}}vec4 n1=texture(lut,v1);vec4 n2=texture(lut,v2);vec4 n3=texture(lut,v3);vec4 n4=texture(lut,v4);vec4 weights=vec4(1.0-frac.x,frac.x-frac.y,frac.y-frac.z,frac.z);vec4 result=weights*mat4(vec4(n1.r,n2.r,n3.r,n4.r),vec4(n1.g,n2.g,n3.g,n4.g),vec4(n1.b,n2.b,n3.b,n4.b),vec4(1.0));return vec4(result.rgb,1.0);
|
|
352
|
+
#else
|
|
353
|
+
return texture(lut,rgb);
|
|
354
|
+
#endif
|
|
355
|
+
}
|
|
356
|
+
#else
|
|
357
|
+
#ifdef LUT_PRECISION_HIGH
|
|
358
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
359
|
+
uniform highp sampler2D lut;
|
|
360
|
+
#else
|
|
361
|
+
uniform mediump sampler2D lut;
|
|
362
|
+
#endif
|
|
363
|
+
#else
|
|
364
|
+
uniform lowp sampler2D lut;
|
|
365
|
+
#endif
|
|
366
|
+
vec4 applyLUT(const in vec3 rgb){float slice=rgb.b*LUT_SIZE;float slice0=floor(slice);float interp=slice-slice0;float centeredInterp=interp-0.5;float slice1=slice0+sign(centeredInterp);
|
|
367
|
+
#ifdef LUT_STRIP_HORIZONTAL
|
|
368
|
+
float xOffset=clamp(rgb.r*LUT_TEXEL_HEIGHT,LUT_TEXEL_WIDTH*0.5,LUT_TEXEL_HEIGHT-LUT_TEXEL_WIDTH*0.5);vec2 uv0=vec2(slice0*LUT_TEXEL_HEIGHT+xOffset,rgb.g);vec2 uv1=vec2(slice1*LUT_TEXEL_HEIGHT+xOffset,rgb.g);
|
|
369
|
+
#else
|
|
370
|
+
float yOffset=clamp(rgb.g*LUT_TEXEL_WIDTH,LUT_TEXEL_HEIGHT*0.5,LUT_TEXEL_WIDTH-LUT_TEXEL_HEIGHT*0.5);vec2 uv0=vec2(rgb.r,slice0*LUT_TEXEL_WIDTH+yOffset);vec2 uv1=vec2(rgb.r,slice1*LUT_TEXEL_WIDTH+yOffset);
|
|
371
|
+
#endif
|
|
372
|
+
vec4 sample0=texture2D(lut,uv0);vec4 sample1=texture2D(lut,uv1);return mix(sample0,sample1,abs(centeredInterp));}
|
|
373
|
+
#endif
|
|
374
|
+
void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 c=inputColor.rgb;
|
|
375
|
+
#ifdef CUSTOM_INPUT_DOMAIN
|
|
376
|
+
if(c.r>=domainMin.r&&c.g>=domainMin.g&&c.b>=domainMin.b&&c.r<=domainMax.r&&c.g<=domainMax.g&&c.b<=domainMax.b){c=applyLUT(scale*c+offset).rgb;}else{c=inputColor.rgb;}
|
|
377
|
+
#else
|
|
378
|
+
#if !defined(LUT_3D) || defined(TETRAHEDRAL_INTERPOLATION)
|
|
379
|
+
c=clamp(c,0.0,1.0);
|
|
380
|
+
#endif
|
|
381
|
+
c=applyLUT(scale*c+offset).rgb;
|
|
382
|
+
#endif
|
|
383
|
+
outputColor=vec4(c,inputColor.a);}`,tk=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*(1.0+time)));
|
|
384
|
+
#ifdef PREMULTIPLY
|
|
385
|
+
outputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a);
|
|
386
|
+
#else
|
|
387
|
+
outputColor=vec4(noise,inputColor.a);
|
|
388
|
+
#endif
|
|
389
|
+
}`,tj=`#include <packing>
|
|
390
|
+
#include <clipping_planes_pars_fragment>
|
|
391
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
392
|
+
uniform highp sampler2D depthBuffer;
|
|
393
|
+
#else
|
|
394
|
+
uniform mediump sampler2D depthBuffer;
|
|
395
|
+
#endif
|
|
396
|
+
uniform float cameraNear;uniform float cameraFar;centroid varying float vViewZ;centroid varying vec4 vProjTexCoord;void main(){
|
|
397
|
+
#include <clipping_planes_fragment>
|
|
398
|
+
vec2 projTexCoord=(vProjTexCoord.xy/vProjTexCoord.w)*0.5+0.5;
|
|
399
|
+
#if DEPTH_PACKING == 3201
|
|
400
|
+
float depth=unpackRGBAToDepth(texture2D(depthBuffer,projTexCoord));
|
|
401
|
+
#else
|
|
402
|
+
float depth=texture2D(depthBuffer,projTexCoord).r;
|
|
403
|
+
#endif
|
|
404
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
405
|
+
float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d;
|
|
406
|
+
#elif defined(USE_REVERSED_DEPTH_BUFFER)
|
|
407
|
+
depth=1.0-depth;
|
|
408
|
+
#endif
|
|
409
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
410
|
+
float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);
|
|
411
|
+
#else
|
|
412
|
+
float viewZ=orthographicDepthToViewZ(depth,cameraNear,cameraFar);
|
|
413
|
+
#endif
|
|
414
|
+
float depthTest=(-vViewZ>-viewZ)?1.0:0.0;gl_FragColor.rg=vec2(0.0,depthTest);}`,tQ=`#include <common>
|
|
415
|
+
#include <morphtarget_pars_vertex>
|
|
416
|
+
#include <skinning_pars_vertex>
|
|
417
|
+
#include <clipping_planes_pars_vertex>
|
|
418
|
+
varying float vViewZ;varying vec4 vProjTexCoord;void main(){
|
|
419
|
+
#include <skinbase_vertex>
|
|
420
|
+
#include <begin_vertex>
|
|
421
|
+
#include <morphtarget_vertex>
|
|
422
|
+
#include <skinning_vertex>
|
|
423
|
+
#include <project_vertex>
|
|
424
|
+
vViewZ=mvPosition.z;vProjTexCoord=gl_Position;
|
|
425
|
+
#include <clipping_planes_vertex>
|
|
426
|
+
}`,tV=class extends eQ.ShaderMaterial{constructor(e=null,t){super({name:"DepthComparisonMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new eQ.Uniform(null),cameraNear:new eQ.Uniform(.3),cameraFar:new eQ.Uniform(1e3)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tj,vertexShader:tQ}),this.depthBuffer=e,this.depthPacking=eQ.RGBADepthPacking,this.copyCameraSettings(t)}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.RGBADepthPacking){this.depthBuffer=e,this.depthPacking=t}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof eQ.PerspectiveCamera?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},tW=class extends eQ.ShaderMaterial{constructor(e=new eQ.Vector2){super({name:"OutlineMaterial",uniforms:{inputBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(new eQ.Vector2)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:"uniform lowp sampler2D inputBuffer;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 c0=texture2D(inputBuffer,vUv0).rg;vec2 c1=texture2D(inputBuffer,vUv1).rg;vec2 c2=texture2D(inputBuffer,vUv2).rg;vec2 c3=texture2D(inputBuffer,vUv3).rg;float d0=(c0.x-c1.x)*0.5;float d1=(c2.x-c3.x)*0.5;float d=length(vec2(d0,d1));float a0=min(c0.y,c1.y);float a1=min(c2.y,c3.y);float visibilityFactor=min(a0,a1);gl_FragColor.rg=(1.0-visibilityFactor>0.001)?vec2(d,0.0):vec2(0.0,d);}",vertexShader:"uniform vec2 texelSize;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vUv0=vec2(uv.x+texelSize.x,uv.y);vUv1=vec2(uv.x-texelSize.x,uv.y);vUv2=vec2(uv.x,uv.y+texelSize.y);vUv3=vec2(uv.x,uv.y-texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}"}),this.uniforms.texelSize.value.set(e.x,e.y),this.uniforms.maskTexture=this.uniforms.inputBuffer}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},tY=`uniform lowp sampler2D edgeTexture;uniform lowp sampler2D maskTexture;uniform vec3 visibleEdgeColor;uniform vec3 hiddenEdgeColor;uniform float pulse;uniform float edgeStrength;
|
|
427
|
+
#ifdef USE_PATTERN
|
|
428
|
+
uniform lowp sampler2D patternTexture;varying vec2 vUvPattern;
|
|
429
|
+
#endif
|
|
430
|
+
void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 edge=texture2D(edgeTexture,uv).rg;vec2 mask=texture2D(maskTexture,uv).rg;
|
|
431
|
+
#ifndef X_RAY
|
|
432
|
+
edge.y=0.0;
|
|
433
|
+
#endif
|
|
434
|
+
edge*=(edgeStrength*mask.x*pulse);vec3 color=edge.x*visibleEdgeColor+edge.y*hiddenEdgeColor;float visibilityFactor=0.0;
|
|
435
|
+
#ifdef USE_PATTERN
|
|
436
|
+
vec4 patternColor=texture2D(patternTexture,vUvPattern);
|
|
437
|
+
#ifdef X_RAY
|
|
438
|
+
float hiddenFactor=0.5;
|
|
439
|
+
#else
|
|
440
|
+
float hiddenFactor=0.0;
|
|
441
|
+
#endif
|
|
442
|
+
visibilityFactor=(1.0-mask.y>0.0)?1.0:hiddenFactor;visibilityFactor*=(1.0-mask.x)*patternColor.a;color+=visibilityFactor*patternColor.rgb;
|
|
443
|
+
#endif
|
|
444
|
+
float alpha=max(max(edge.x,edge.y),visibilityFactor);
|
|
445
|
+
#ifdef ALPHA
|
|
446
|
+
outputColor=vec4(color,alpha);
|
|
447
|
+
#else
|
|
448
|
+
outputColor=vec4(color,max(alpha,inputColor.a));
|
|
449
|
+
#endif
|
|
450
|
+
}`,tK=`uniform float count;
|
|
451
|
+
#ifdef SCROLL
|
|
452
|
+
uniform float scrollSpeed;
|
|
453
|
+
#endif
|
|
454
|
+
void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){float y=uv.y;
|
|
455
|
+
#ifdef SCROLL
|
|
456
|
+
y+=time*scrollSpeed;
|
|
457
|
+
#endif
|
|
458
|
+
vec2 sl=vec2(sin(y*count),cos(y*count));outputColor=vec4(sl.xyx,inputColor.a);}`,tX=new eQ.Vector3,tZ=new eQ.Vector3,tJ=`#include <common>
|
|
459
|
+
#include <packing>
|
|
460
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
461
|
+
uniform highp sampler2D depthBuffer0;uniform highp sampler2D depthBuffer1;
|
|
462
|
+
#else
|
|
463
|
+
uniform mediump sampler2D depthBuffer0;uniform mediump sampler2D depthBuffer1;
|
|
464
|
+
#endif
|
|
465
|
+
uniform sampler2D inputBuffer;uniform vec2 cameraNearFar;float getViewZ(const in float depth){
|
|
466
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
467
|
+
return perspectiveDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y);
|
|
468
|
+
#else
|
|
469
|
+
return orthographicDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y);
|
|
470
|
+
#endif
|
|
471
|
+
}varying vec2 vUv;void main(){vec2 depth;
|
|
472
|
+
#if DEPTH_PACKING_0 == 3201
|
|
473
|
+
depth.x=unpackRGBAToDepth(texture2D(depthBuffer0,vUv));
|
|
474
|
+
#else
|
|
475
|
+
depth.x=texture2D(depthBuffer0,vUv).r;
|
|
476
|
+
#endif
|
|
477
|
+
#if DEPTH_PACKING_1 == 3201
|
|
478
|
+
depth.y=unpackRGBAToDepth(texture2D(depthBuffer1,vUv));
|
|
479
|
+
#else
|
|
480
|
+
depth.y=texture2D(depthBuffer1,vUv).r;
|
|
481
|
+
#endif
|
|
482
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
483
|
+
float a=cameraNearFar.y/(cameraNearFar.y-cameraNearFar.x);float b=cameraNearFar.y*cameraNearFar.x/(cameraNearFar.x-cameraNearFar.y);float c=log2(cameraNearFar.y+1.0);float d=pow(2.0,depth.x*c)-1.0;depth.x=a+b/d;d=pow(2.0,depth.y*c)-1.0;depth.y=a+b/d;
|
|
484
|
+
#elif defined(USE_REVERSED_DEPTH_BUFFER)
|
|
485
|
+
depth.x=1.0-depth.x;depth.y=1.0-depth.y;
|
|
486
|
+
#endif
|
|
487
|
+
bool isMaxDepth=(depth.x==1.0);
|
|
488
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
489
|
+
depth.x=viewZToOrthographicDepth(getViewZ(depth.x),cameraNearFar.x,cameraNearFar.y);depth.y=viewZToOrthographicDepth(getViewZ(depth.y),cameraNearFar.x,cameraNearFar.y);
|
|
490
|
+
#endif
|
|
491
|
+
#if DEPTH_TEST_STRATEGY == 0
|
|
492
|
+
bool keep=depthTest(depth.x,depth.y);
|
|
493
|
+
#elif DEPTH_TEST_STRATEGY == 1
|
|
494
|
+
bool keep=isMaxDepth||depthTest(depth.x,depth.y);
|
|
495
|
+
#else
|
|
496
|
+
bool keep=!isMaxDepth&&depthTest(depth.x,depth.y);
|
|
497
|
+
#endif
|
|
498
|
+
if(keep){gl_FragColor=texture2D(inputBuffer,vUv);}else{discard;}}`,tq=class extends eQ.ShaderMaterial{constructor(){super({name:"DepthMaskMaterial",defines:{DEPTH_EPSILON:"0.0001",DEPTH_PACKING_0:"0",DEPTH_PACKING_1:"0",DEPTH_TEST_STRATEGY:1},uniforms:{inputBuffer:new eQ.Uniform(null),depthBuffer0:new eQ.Uniform(null),depthBuffer1:new eQ.Uniform(null),cameraNearFar:new eQ.Uniform(new eQ.Vector2(1,1))},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tJ,vertexShader:eX}),this.depthMode=eQ.LessDepth}set depthBuffer0(e){this.uniforms.depthBuffer0.value=e}set depthPacking0(e){this.defines.DEPTH_PACKING_0=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer0(e,t=eQ.BasicDepthPacking){this.depthBuffer0=e,this.depthPacking0=t}set depthBuffer1(e){this.uniforms.depthBuffer1.value=e}set depthPacking1(e){this.defines.DEPTH_PACKING_1=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer1(e,t=eQ.BasicDepthPacking){this.depthBuffer1=e,this.depthPacking1=t}get maxDepthStrategy(){return Number(this.defines.DEPTH_TEST_STRATEGY)}set maxDepthStrategy(e){this.defines.DEPTH_TEST_STRATEGY=e.toFixed(0),this.needsUpdate=!0}get keepFar(){return this.maxDepthStrategy}set keepFar(e){this.maxDepthStrategy=e?1:2}getMaxDepthStrategy(){return this.maxDepthStrategy}setMaxDepthStrategy(e){this.maxDepthStrategy=e}get epsilon(){return Number(this.defines.DEPTH_EPSILON)}set epsilon(e){this.defines.DEPTH_EPSILON=e.toFixed(16),this.needsUpdate=!0}getEpsilon(){return this.epsilon}setEpsilon(e){this.epsilon=e}get depthMode(){return Number(this.defines.DEPTH_MODE)}set depthMode(e){let t;switch(e){case eQ.NeverDepth:t="false";break;case eQ.AlwaysDepth:t="true";break;case eQ.EqualDepth:t="abs(d1 - d0) <= DEPTH_EPSILON";break;case eQ.NotEqualDepth:t="abs(d1 - d0) > DEPTH_EPSILON";break;case eQ.LessDepth:t="d0 > d1";break;case eQ.LessEqualDepth:t="d0 >= d1";break;case eQ.GreaterEqualDepth:t="d0 <= d1";break;case eQ.GreaterDepth:default:t="d0 < d1"}this.defines.DEPTH_MODE=e.toFixed(0),this.defines["depthTest(d0, d1)"]=t,this.needsUpdate=!0}getDepthMode(){return this.depthMode}setDepthMode(e){this.depthMode=e}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNearFar.value.set(e.near,e.far),e instanceof eQ.PerspectiveCamera?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},t_=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;
|
|
499
|
+
#if EDGE_DETECTION_MODE != 0
|
|
500
|
+
varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;
|
|
501
|
+
#endif
|
|
502
|
+
#if EDGE_DETECTION_MODE == 1
|
|
503
|
+
#include <common>
|
|
504
|
+
#endif
|
|
505
|
+
#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1
|
|
506
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
507
|
+
uniform highp sampler2D depthBuffer;
|
|
508
|
+
#else
|
|
509
|
+
uniform mediump sampler2D depthBuffer;
|
|
510
|
+
#endif
|
|
511
|
+
float readDepth(const in vec2 uv){
|
|
512
|
+
#if DEPTH_PACKING == 3201
|
|
513
|
+
return unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
514
|
+
#else
|
|
515
|
+
return texture2D(depthBuffer,uv).r;
|
|
516
|
+
#endif
|
|
517
|
+
}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);}
|
|
518
|
+
#elif PREDICATION_MODE == 2
|
|
519
|
+
uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);}
|
|
520
|
+
#endif
|
|
521
|
+
#if PREDICATION_MODE != 0
|
|
522
|
+
vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);}
|
|
523
|
+
#endif
|
|
524
|
+
#if EDGE_DETECTION_MODE != 0
|
|
525
|
+
uniform sampler2D inputBuffer;
|
|
526
|
+
#endif
|
|
527
|
+
void main(){
|
|
528
|
+
#if EDGE_DETECTION_MODE == 0
|
|
529
|
+
const vec2 threshold=vec2(DEPTH_THRESHOLD);
|
|
530
|
+
#elif PREDICATION_MODE != 0
|
|
531
|
+
vec2 threshold=calculatePredicatedThreshold();
|
|
532
|
+
#else
|
|
533
|
+
const vec2 threshold=vec2(EDGE_THRESHOLD);
|
|
534
|
+
#endif
|
|
535
|
+
#if EDGE_DETECTION_MODE == 0
|
|
536
|
+
vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0);
|
|
537
|
+
#elif EDGE_DETECTION_MODE == 1
|
|
538
|
+
float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0);
|
|
539
|
+
#elif EDGE_DETECTION_MODE == 2
|
|
540
|
+
vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0);
|
|
541
|
+
#endif
|
|
542
|
+
}`,t$=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;
|
|
543
|
+
#if EDGE_DETECTION_MODE != 0
|
|
544
|
+
varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;
|
|
545
|
+
#endif
|
|
546
|
+
void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0);
|
|
547
|
+
#if EDGE_DETECTION_MODE != 0
|
|
548
|
+
vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0);
|
|
549
|
+
#endif
|
|
550
|
+
gl_Position=vec4(position.xy,1.0,1.0);}`,t0=class extends eQ.ShaderMaterial{constructor(e=new eQ.Vector2,t=2){super({name:"EdgeDetectionMaterial",defines:{THREE_REVISION:eQ.REVISION.replace(/\D+/g,""),LOCAL_CONTRAST_ADAPTATION_FACTOR:"2.0",EDGE_THRESHOLD:"0.1",DEPTH_THRESHOLD:"0.01",PREDICATION_MODE:"0",PREDICATION_THRESHOLD:"0.01",PREDICATION_SCALE:"2.0",PREDICATION_STRENGTH:"1.0",DEPTH_PACKING:"0"},uniforms:{inputBuffer:new eQ.Uniform(null),depthBuffer:new eQ.Uniform(null),predicationBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(e)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:t_,vertexShader:t$}),this.edgeDetectionMode=t}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.BasicDepthPacking){this.depthBuffer=e,this.depthPacking=t}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(e){this.defines.EDGE_DETECTION_MODE=e.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(e){this.edgeDetectionMode=e}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(e){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=e.toFixed("6"),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(e){this.localContrastAdaptationFactor=e}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(e){this.defines.EDGE_THRESHOLD=e.toFixed("6"),this.defines.DEPTH_THRESHOLD=(.1*e).toFixed("6"),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(e){this.edgeDetectionThreshold=e}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(e){this.defines.PREDICATION_MODE=e.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(e){this.predicationMode=e}set predicationBuffer(e){this.uniforms.predicationBuffer.value=e}setPredicationBuffer(e){this.uniforms.predicationBuffer.value=e}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(e){this.defines.PREDICATION_THRESHOLD=e.toFixed("6"),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(e){this.predicationThreshold=e}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(e){this.defines.PREDICATION_SCALE=e.toFixed("6"),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(e){this.predicationScale=e}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(e){this.defines.PREDICATION_STRENGTH=e.toFixed("6"),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(e){this.predicationStrength=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},t2=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize)
|
|
551
|
+
#if __VERSION__ < 300
|
|
552
|
+
#define round(v) floor(v + 0.5)
|
|
553
|
+
#endif
|
|
554
|
+
#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
555
|
+
uniform mediump sampler2D inputBuffer;
|
|
556
|
+
#else
|
|
557
|
+
uniform lowp sampler2D inputBuffer;
|
|
558
|
+
#endif
|
|
559
|
+
uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x>end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x<end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.y>end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;i++){if(!(texCoord.y<end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){
|
|
560
|
+
#if !defined(DISABLE_CORNER_DETECTION)
|
|
561
|
+
vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0);
|
|
562
|
+
#endif
|
|
563
|
+
}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){
|
|
564
|
+
#if !defined(DISABLE_CORNER_DETECTION)
|
|
565
|
+
vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0);
|
|
566
|
+
#endif
|
|
567
|
+
}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){
|
|
568
|
+
#if !defined(DISABLE_DIAG_DETECTION)
|
|
569
|
+
weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){
|
|
570
|
+
#endif
|
|
571
|
+
vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d);
|
|
572
|
+
#if !defined(DISABLE_DIAG_DETECTION)
|
|
573
|
+
}else{e.r=0.0;}
|
|
574
|
+
#endif
|
|
575
|
+
}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,t1=class extends eQ.ShaderMaterial{constructor(e=new eQ.Vector2,t=new eQ.Vector2){super({name:"SMAAWeightsMaterial",defines:{MAX_SEARCH_STEPS_INT:"16",MAX_SEARCH_STEPS_FLOAT:"16.0",MAX_SEARCH_STEPS_DIAG_INT:"8",MAX_SEARCH_STEPS_DIAG_FLOAT:"8.0",CORNER_ROUNDING:"25",CORNER_ROUNDING_NORM:"0.25",AREATEX_MAX_DISTANCE:"16.0",AREATEX_MAX_DISTANCE_DIAG:"20.0",AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)",SEARCHTEX_SIZE:"vec2(66.0, 33.0)",SEARCHTEX_PACKED_SIZE:"vec2(64.0, 16.0)"},uniforms:{inputBuffer:new eQ.Uniform(null),searchTexture:new eQ.Uniform(null),areaTexture:new eQ.Uniform(null),resolution:new eQ.Uniform(t),texelSize:new eQ.Uniform(e)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:t2,vertexShader:"uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}"})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(e){this.uniforms.searchTexture.value=e}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(e){this.uniforms.areaTexture.value=e}setLookupTextures(e,t){this.searchTexture=e,this.areaTexture=t}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(e){let t=Math.min(Math.max(e,0),112);this.defines.MAX_SEARCH_STEPS_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setOrthogonalSearchSteps(e){this.orthogonalSearchSteps=e}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(e){let t=Math.min(Math.max(e,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setDiagonalSearchSteps(e){this.diagonalSearchSteps=e}get diagonalDetection(){return void 0===this.defines.DISABLE_DIAG_DETECTION}set diagonalDetection(e){e?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION="1",this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(e){this.diagonalDetection=e}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(e){let t=Math.min(Math.max(e,0),100);this.defines.CORNER_ROUNDING=t.toFixed("4"),this.defines.CORNER_ROUNDING_NORM=(t/100).toFixed("4"),this.needsUpdate=!0}setCornerRounding(e){this.cornerRounding=e}get cornerDetection(){return void 0===this.defines.DISABLE_CORNER_DETECTION}set cornerDetection(e){e?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION="1",this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(e){this.cornerDetection=e}setSize(e,t){let r=this.uniforms;r.texelSize.value.set(1/e,1/t),r.resolution.value.set(e,t)}},t4="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC",t5="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAYAAAABNmBHAAAgAElEQVR4Xuy9CbhlV1ktOvbpq09DkiIkUBI6kxASIH0DlAQiIK1wRfSJTx+i4JX7vKIigs8HXpXvqVcvrcC9agQ7IDTSSWgqCQQliDRBJKkkhDSkqVPNqVOnP+8b//rH3P+eZ+199tlznVTlvVrft7+1T7OaueZY42/m37QALKNk2wHg1pITlB17mC+Pp11W3X/LHyT32vhg48/5SOv+PnwpsHA70JoGlueB1iKApeqzvOzn44GatTB76Xzhd7suBR7+WWADgDEAwwCG/L54b/poDLrHuvvm70Z2Avhsc+PVcxscBU8F8C8ADg5+ipIjD/PlGwfgju8B924E5seARUfLsiNmqQW0IjL8+7L2NYD/7COBzfcCm+aB8SVgdAkYIRCXKyDax4EdAanL5PuNPllNvXDlAHwFgP8AcC2AhRIoDXbsYb48dl5WkVFTE3LGDcC9m4CZCWBuFFgeAZaGAYJQQCRqDHT+McJrVb8zwATUXH02MHYfMHEIGFsAxgjApQqACYQORjtd/B7Axt/z79sC0+cMPgjjlwPwVwHcA+DfAHzTxcVgWBroqMN8+cYBeM71wH0TwKExYHYUWCIAHYRLTlkCYgcIBcAgU/n3qy8GRu4HRgnAOWBkERhddPAJhGJDBxkvw7cqimr+zFM/ZLnZF64cgL8BYD+AWwB8x/dlWuWagHiYL984AJ/0RWBy1AE4AizyM1yxYAcTigW55xMbAkxEiwEdkJ/ZCQxPAiOHgBECcKEC4TBZcKkSv+mTieNcNPNC26mLNsj45QD8LQDTAO4GcJt/7iw2bfoG4WG+vAGwm9ExiEg69zpg/wgwPQLMjgALzn4E4aIzoJjQ9g4024uygkj+pyuAoX0VAIfngOH5NgCHMhAm8Sv2y3XDZeBhNIp8OzJE8OsBzAKYBHAXgDt8/4O+MVT0j4f58o0D8Pxrgf3DwMwIMEPQEYRkNwfgsuuDZLskip0No0gWMD/9HGDoADAkAC4Aw/wsAgZAgs2Z0ABI0GU6IVmKv+f28KDnHxkA/G0A8y6G73N9kOCjXnh/Ebb6OvgwX75xAF5wLTA1VIHPADgMLDj4yIA5AAm6aCUnv4oz46eeDwxNAUMzwJAz4BABSNDFTwSfg7DDKHE23MG5PqIY8A1u/dINs9dBdy8AgnGPM2NfUBrsnw7z5RsH4IXXAAcJviFgluAbygBINnSLWOAjGxJ4pgOKDV0v/OSLKp8iGXBovhLBBOCQM2ACoTOhnYrAdItYbCij5JFzRyIAqRccAnDAQUjg6UNQ7hsMXP0cRQAexss3DsCLCECCLwCQzMcPwUi2MwAScAKbfnY/YRLFQ8DHX+IAJAMSfDkAF13kLvleIjhjQQHxUVS3jjgGpKeeNzYVQEjgUS8k+PghONdhIwAP4+XXBYCHKIJbwJyDTgaIAdCBJx3Q2M8tYAHP9m4df/ylQOsQ0JqtRLCx30K1wtLBggScQOgsKBGcWHAJeOwRC0BSM1mQIKRbhh+Bj98JQP6t4U0APEyXXxcAEnxkQAFwoVUxID9kvQg+c1C7vidRbIDkc24B//hTQGumDcCWA5DgMxASdNIFBUI5pCML8v8API5zfEQx4BudgqiczviSnJhQwCP4BMCGl+wO8+U7AJi/W4O4YS6+pmK/2ciADsAOBhTIIiAJnPB7AvNjP+0AnANaYkAHX2JBAc+tYaJXOqBZv24Vc386XW5dtkHGW+4HFAJonpOe+YYQZAShgKjv3PNvPQaxVoI8zJdfFwASfPzMUwS3Kt1v0UFIlos6oDFdAGFcliMAP/ryAEAGNwQRnDOgLbdlIEwrIs6AZ/QgkMMHQF6ZAKQcJAsSYPwIeAIk9wJgoPK1gi7+PwF4GC/fOAAvIQPSs0URTPBJ/Pp3GSEGRHfBCIQ0xowBtUbcAj7ys5X4Jfu1HIAGQrIgQRXEsAFQIORDFhiDY/rMHmrU4QUgR08AkgUjCAW6CD6CkwBsAIQC4GG6fPMA3OXiNzCg2I9gNCMksmAAoemDzoimFwL48M85AKkiuQVMAAp8CYRRDAt8GQiJ67N6GJODAXAHlsGguscA2AJg1IPGYmxOpBxFWkRN9LsATgIwXnNs/v/5z/9XCf8BO3YAtxbc/46/KDt+5+ea1Yku2VUxHz/z0v24FwMGK1gWsK2OUUxHHdCBeRUB6OxHABr4ZICIBd0QWSF+XRdMTAjgCdTrG9cBNwE4F8CpDkICyYLGsuhFt6zs+gISwUen8zEAjgMw4cfx2H6O/90yAFo84Cbg4ID3/9TfLTt+5+ebnRABkODjx0SwPi5ec/FrYpmqSAxM8Dn60CsqAFI6GfhqAMiDE/gokmvEr0C4PgDkBQm40wE8zMFEUDKEVoxIMLl/KS73mE7H9d+vcKHQQcjwW0Yu9nP8m8sAmOIBuWY6wP2/4s0ezjjg8TuvaR6ABJ70vxUApGrm7EbGE+i472BAB+WHfqHS/eoAaEwY2E9+wLSXTqhI7CXgnB6LCoOJ4BiST+hTnG0HcCwAglCx3ARoZEVFXnBPp/O/A/hXACc7CPs9/i1lAOyIB+RDX+P9/+pbQjjjAMfv/PL6AFDs1wFAgs/9fgKfgdE/ZEpuiQlbwAde6QAMBgiRmsSwA9BY0JfjovGRDBMH4TlcXGhcBOc6HkF0gjPhZgchxTLZMAci/04W/B6Ab3t09EPXcPyflgFwRTwgJ2MN9/8bf5qFM67x+B/aW4XQz42FeL0YrRyikztUFw0704mf9kXgxhOAqc3AAsPyRxxQCs/PdXOFY0W1KHy3QIUGtx+6vdnx1vsB+dsTncm2AogglFgVEAlUWrOMB2RyEmMCGQ/Y7/HvKns6tfGAnJQ+r/9b76oJZ1zD8WdyQjYBh8aBhVEHjELouQ8ukQ7VRSCJAALwkr+sALhnGzDD3JAJYJHg9uhoi4bx8ytkWUtvHT/7+Zc4dw1uZ3612fH2dkQf7yxIEEockwkJQn4IQoq8unhAhmPRKKFx0uv4K8ueTs94wD7u//VX9ghn7OP4c+4G7h8HpseB+dF2AKlFLwuAIZ8jD6NPrOhAffmfA9/ZBuzZCkyRWSeqBCWyoYGQ5yQrBpDbum/ME1HoPo0XEkSD2zlfbna8q6+EUJcTCxKEtHL5EQjP6BEPyIgYAZBvYt3xHyx7OqvGA65y/7/9wVXCGVc5/sl7qxD66dEqiYgRzAqhN1A4CBNAAlDyAFI+iZ9/N3DLJuC+jcDUBmCWyUnOrmTYCMIOkNclLg0B8/RsNLg9+UvNjnd1APLmmQpFHyEBROuWACQT8nN+H/GAvY7/VNnT6SsesMf13/CpahGnZzhjj+PPmwX2MYdDIfQexWyBAwEUOQDrRDN/98p3A7dvAO6fAA5sqHJDBEAyoUVGkwEd6HR12XU4kwzfl6fCXTZzjy57vvnR513X7Hj7AyDvggAUi9EyFgiZqNxPQF6345nOWbD1HQ/Y5fpvuLa/2+82/vNHgAPDFQDnhoF5j2C2qBWCI8bw1eRw5CL5l94L3DEOTI4DB8Y9OWmsEu/zBJ3rgsaybqBob/7A4C7jtWcooRrczr+u2fH2D0AOQgAUCxKEP7aGgLy64+m6KdjWFA9Yc/03/Osa4glrjr+AupqHz1sEs0cxG0BC9HIePLoit9eNkVf9L+DuUWByDJgaq4ybGYLPAWgiXmLedUE7dwC7saL7CqfPKXi4NYdaykCD410bAHlDEsNiwZ9wAPYbkJcfz6T2gm3N8YDZ9d/wHxUA+739fPwXPrSKYGb+BuP3jAFDElFH9HIWwbzCIGkBr/or4J4RYO8oMOW6ZVcAuvi1Cgoha04BCwT5gfMKHm7NoRde2+x41w5A3hQZkADk5+cGiAeMx3+/7AENFA8Yrv/G71cAXFM4Yzj+otOAaQLQA0gZxaIIZtMDFTigKJV8H9Iq6aZ59ZXAvSPAvpEKgBTtBODcSCWCZeRYtpzrmLyeGNCAyFl1v+Hei8qeb370Rdc2O97BAMi7EgB/2QG41nhAHU9LuWAbOB7Qr//GPRUA13r7Gv9FZwIMoVcEswEwfDoimEP0shKKtIphaZQAXv1+YM+wA3DEdcvRKkGJADQQEsQuhi1Tjt95vBsh5nx2IO59SsHDrTmUOStNjndwAAqEry0IyCMICkOyiuIBNwBvPFQQT7gBuPjc9oRYAIHyOEL4vIFEYVNaOou5vCGE/tV/A0wOVcnpzI47NOri3QFIBpSeaSDUdYLOSWvYImSGgftpJDa4MWJbAGxivGUA5MAOc0Be6eVLj7/4Mk+hzCOYPYpZDBiNkLh+G/M3yFyv/ltgL3W3YQfgcFUhgRY2PwY+Z7/EhAR1SFyXCOb57r28QfQBsJQBMn5D4y0HYLPje9Cd7RIC0PM3EiMofF4gVCBp1P840ix/gyz56r+vAMjk9Gl375iB4+CzveuZdLkkEPJ8ZEfX/6R73vOjzT5Si9hucLxHAVg4PwJgRwh9CKOXK8YA4ZEqKZXSQWh5P+5AftXfA/uGKvYjCKn72cctbFrZNECka5L5CPwIPtMH3TVz17MLB5gdLgA2Nd6jACycHwLQxFEUSR5ASvARDB0h9AQb9bXIgCGk6lUfAPYTgEPAITKgg1BObk58srTJgG58WMkWMaAbQQT1nc8rHGANAJsc71EAFs4PAagQestgC1lsBJ4BMCSOK6dDUcwqqaFiQr/0QeAAAdjy+jBiQQeeMSBZT3nCPUDIa9z+/MIB1gCwyfEeBWDh/BCAeQSzgkjFfGLBBD5nxQ4DxN0wv3hVxX5TBGDwL5obxvVA5YqYL5BeMLd66YYxJpRB0gK+96LCAdYAsMnxHgVg4fwIgMrhUPKQ2C+Bz0PmBTqBMQehAbDlIjj4F80KJguSVZ0FuXpjoCOgXawLjALhbT9eOMAuAGxqvEcBWDg/l1IE05Ed0ygZnyHdz0VwCqEPIfNyx0QQvvLDFQCp+8nfZk5und8tXwIgWcHSNX0N2CJmnAl3v6RwgNnhl17T7HiPArBwfghAS7mV/hey2JS9FvM3BLpUUi1YwDRMXvkRYJoAlAh2l0dcZ04s6JUTDIjyBcrl4yDc/dLCAdYAsMnxHgVg4fxwKVwJgGEJNmWtxpQMpX9on2eRhVA+O56AjMfnP+e3Xvf3NwG4xIPTleiY55bpGh6UbafNU0l0z0p+5Jh5HqYJ6b51nP6XP8cx12XNHQVgIQB/bFPVg2OC7Q+WgVFWng/FvtWLI06uWh5oguKEcXVS/9sEAF//VGD7t4ETDgJbF4CNi8CGZWBs2fPL/H6Vwp2KEtVk4fJ+v/EIYPN9wKa5qu+IncfPwXHVZe/aOL3EbwS7xv8A1rQvnO0j8PArTgTGZ4BxFv9mIxhOCGsv+0OPYDRghcLfkWkEuq0+G00x4OtfDGz+d2DbHmDLjL8si8AYP/7CGIAiEEMTG92zXqSbH+d9R2aA0XnvO+JjthiIrOVDHHPOkBrzUQAWAPsZp3oPDpa/Xag6EVkLBK+5rAnJC3/nYk/APD704WiEAV8OTHwX2LQH2DgFbJgFNrBhjd8r79deGoEwsllgNBOzy8CdjweG9wBj08AIAci2D6HafmyAk4/Z7SJ72hGYRwFYAMDLTwOGp4FRFgD3HhzqRGQiyeurqOdG6r0Rm8IEZjzRlkiqCWoEgK8Axm4BJu4HJhyAbFhDxmbDGnZO4j0SgLGDkpibgEq66TJw/1nA0F5gdLpq+zDqFfd5LMeWqu5HNST0uJOIllg+qgMWgI+HPv0xwLA3gWHpW2sC441gCECbmKziaGrnUdMO4aHeh6MxAP4SMHI7ML4HGD8AjHvHJGNAgpDgY/ck3stipRemvVhc+uASMPUEYGh/9dIRgGx8Y+MNbR/00uVtH0wEx94j/v0oAxaA8Ed+GBieAYZZg5kADC0QWGOFzGJlcGPzl1BxNLXD8sk4xftwNAbA/wwM3wGMUmxOOQBnHXzetIYvibonmSiuYTNjriVg7glAiwBk0fNZH6+PmX9P6kfNmCXGpftJ7TgKwBIAnln14BAAYxMYm5C6RjCyCoOyr0qkD/c+HI0B8DXA8N3AyCQwesD1VQKH7EcASm1Q+y4CkN9pUKiVF5nLvy+fBbTUd8QBaH1HvNBROiZvfsNnrF4kcvPwpdsBLBeU18Nf7AB23Dp4ecHC8oBgUlJJecLS+7+WOpE3gbE+HKw+yoevCYkMGKqPJrdEKARutaFYRs1fiEZ0wP8CDN8LDO8FRqYq3W10pgKgfYLaYCzootgA6KXaTA90y374TKB1sBozy77xHFZ536utRgAmEaw6g5kUSFZwSXnA330qsOlfgHMPDlZesLA8IOjoLypPWHj/11EnCiVwkz7kAExtsGraYUWdSDX5TmsagL8KDBGA7Bd30JsW0oWivnEOQNP7yGTSBR101AlZSUtGyfgZDkCWY1HnJdcBVe6325hTvelg2CQjZNDygG/2An0j1wKnL6y9vGBheUC8prQ8YeH9X39OVQSc7Mc6fCaKvAeHdCIVf4yMYCynTpX+nb97NJmlSQb8r8DQHm9YOFUZTKOzoXGhs6AxF0HIexcLBvWBuiHN8s2ne98R3qc6L4Vyb2oBVjfm9MIFHbjDCh6kPOBbQoG+oW8CO5bWVl6wsDwgfr20PGHh/X/1iaEIuDcCTIW/1Q4rFv8OnYiW3c+W2iKwUjKbyjQNwL1uuR6sAEgDgq1brXOmV81PxhNB6DUDBSYzQJwFtz623XcktX1Q1VWKaTF/zZhVazBVYA1tX5MazsGvobwe/jQr0Ne6BTh5uf/ygoXlAfG60vKEhff/rSe1i4DnTWDUACY1guFTDqLYdCBvf6DJYSMYATBfOx1kLfj1v1axH10nQ3Sd0GUkBnTfpemtBJgseIKQAHLQcVxa2TnuMW0Aqui5es8xBIegVdVVE8VhzHnLh65WMB9An+X18K6aAn2tO4ETl6vqbKuVFywsDwhevqg8YeH93/Rk70JE90nowxZbIJjvS3WYNSGUwGHJTpPxwwcbBuBrgRYBeKACn7VtpdUu/c0NJxO9BIxcKu4TTODzbkonPLoaL0vyUQRb2y8HsL1ckfWzMeuFi40Qezqi+yiPhyt7FOjr6/gCFwgP7Xb5vssTFt7/nQRg6MGRWmDRoeyTlpgw68GRTwgZgo1gGmXAX6/8dtaylSKY/koyID9BhzML3q1gAos2AcOrZYSoq/pJp1VtODRm9Z3LS/7WjVkvXOzEtOpKyGrlAT+4SoG+VY8vBGCvy/dVnrDw/vee65NBJiAjBIVcAJQjOm+DkCZEeiGAMw6sAwDZsJrAdhFM9rPGhd4904Co5oVuCZPV6kD40Ec6+9W8dBTBsfdc3nkpvnB82fp2RPcs79dHgb51LA9ofsDV6vut5/3PnxcAmLVBiDqgevDaJLkYrpuQxzcNwN8AWgIgRbB8loEBzXDwl4cGiDGft58SCOWGedgjvOJ+bPvgRkiuA+ZjzhnQQOiFNVbloa7l/fos0LdO5QENgEXlCfs8Qbf7HyMA3QVjYihYhLENgjX9y/qwxQmRU/asfd0ZcLU2CHVGyusJQLKfVi98CS12T5f7iECkHpsMkAhCF8+nshWH2I/jXsOYO144GV/9ApAIrS3vt4YCfetQHtAA2G+/4PW4/2PPbzMgmUMi2NoeSCRxIt2/FvuxWURIWCXg357gfTjEDNIHnTRXRCpH5ugKwGl3HpMBXQc0v6WLYVm/5limj04rG762K2uYY9jBkr9+rI03NL5ZbczS/dJ+LQyoga4o77fGAn0NlwdMAOy3vl/T938KAcj121z8Bn+Y9eWQJRz8Y6kNagDh2ey5EvxjxQD8TWdAuneCCO4An1vw5vdzQMmdktwq7pLZQR+dM34+ZumAxvY1Y04uqOAJ6FsExzeto7zfAAX6GiwPaLWR1lrfr8n7f/Rl3QGzmsis+/uO71V9OFgP2gpPhgr7TGRqRUT6dyvr4aIs/pm/2zVUNbBSv6G8e5pEv0Cvec7Po7+bTtjlBRlkvAMBkDeQyvsNWKCvofKACYBrre/X1P0/oWEAnnFD1YdjhtXxR73mX10FfCHHE9pVWcGAI/S0gKsfA2y+twrFZw6Hxf/F0Pk8Ri/kpGSnMuDx5T0iACgQHioo0NdAecBUHW6QdsV2/cL7v/Cyqr5gnc42CCOcfX1VIZ/V8We9IDmTzVXwPDJiXuKXPxtDBma8+lzP4WAgKkPxCUAPE4v5GzEuMX0PYJPLhB6FJsc7MAMmkVxaYC/K9gG+F1++8AQ7Gwbgk78I7GFpXgIwFiRXOwaJZPUbiR0yCUDRk+cHf+YpwMj9HgfI8ClGPyvsSiH0WSKRuYlitLb/zHM/JOSs5C/YIC9cMQDZr/dwxgOW9gtGYUBi0wA8l304vDQvAchilFbpIBQhZ7Ejq6ZQ0/Yhil8y4j89Axie9DAsD6FX9HOK3QtROTFkviN83kG4felIY8DCeLrSeMDSfsEovAECUFsTjHD+tcB+tkFgcXKvBRir7qtFl9owmO4Xy/1G3bAFfPrZHorFNWBFwHjQAFctIghj2kBarw06If/+MM9ZqTN6DgsDojCerjQesLRfMApvoGkAWh8Ob/tgAPSKWCp8ngNQtadjmTdltvNvn3peFYhgQQgh+iUmEaUAUoXM1yRLmWuFLaE9Z+XIAWBhPF1pPGBpv2AU3kDTALzwmqo6qtVh9kJErAudABia38TC5wJgS2xIhAwBn3yhByL4EhzXfRXxYsDTJ4IvrNN2JFMxZcBzVo4cABbG05XGA5b2C0bhDTQNQLZBYH1AVsQSAAU+imI1obHyblnjG/kJk3U8BHz8xVUQAhnQIl5CyNgKAGp5LKSSCoAySh5Jj79vTagcxUaIBeRNe79g9gq+DXig4wGzy+PONfT7RWFA4noAkGXZVAhcBckJQgNgrLiaNb3paIDo1vHHX+oA9LQBi4DxJcOUPJUnTgU2NJUyROs8irGARxQAC+PpCtsFd40H/AEf0gMQkLgeACT41PiGoLOKqyrJq3K/Ya9mNyr5FusN/uPLPIeDa8Bc+w3rtyl4VFHaMZc3i9RWBM9jjzgAFsbTFbYLRmm/YBTeQNMAtD4cBKDXBTQGdAB2MGBo8SCLmEuS1AFVAJ3A/NhPt0PoCcA8bSDG76XI7aySg6JYuGfKwJHFgH0E5B3ueMCe/Y4L+xVHAOZ+9EHcEgQgwbeiEYx6jwTdz4qfu7EhEJqxGqruf/RnHIAEnxgwBM0aC8aUAYWNBRCmoIll4HTqO122QcZbrgMWxtMVtgvuOx6wa7/jwhtoGoDWh4MBJ16WN4lfr8AqI0TVV1O1fa9BbQzovkAy4Ed+NgCQUSxZCFWvCOaOFREXyUwZOPIA2GdA3uGOB6wPaOz+QPv5S+MA3OXiN9aclghW+d3IgupBF2pPqxcxGenDPxfSRh2ASiKKiVP2PaZScvAKoA0VDc6cOlIB2GdA3uGOB1zR77iwX/F6AFB9ONSOQW0frA50sILVcckWJyIDSgwPAVcJgFbYuZ3FJvAlEHbJ3IsgJLGedeBIA+AAAXmHOx6wo99xYb/i9QKg2iAIfDJEJHqj4SExbEty0gkdhB/6P9oZbBZIGiKYVb9GKaN50lRHBLOvhDxh/5EKwDUG5B3ueMB2QGM/grb7/6wHAPNGMAY+GSGUjC52VX2f2CD4+HO0gqkZfegXKgBaHkcWtS0AWii9xG1ImrLlN5XR8L8fmQD05BVrmEENmpYSP9QX+KHiqj2/82+HqqDWwnbBRfGATdzAegGwru2DpRq7Mzq2fpAf0Nq0Rl2wBXzglZ4yUAPAmDSVWDBPHQjLcgTqOZ6zUvdKHh4ruDCerox/Dnu7YqwXAC1NI/QcEQuK6WK/kdgCTGC0PYAP/KIDMBgglq+hIkrOfsaCviLSofcJgJ5AdM7kkSaCj/HqQKVIGvD4swF8bcBjmzjsaQ2H5D/6acBd9wALB4DFWWB5AVherMp4GKIYEOp7+26UF0aSfT/xYuDG7wDjrIpAERytXf2vajj7ueryQXSFl10K/ON3gIWDwCLvjfGB8Z54O+Ee4ve6513uB2R1yzsqC+twbC8HcNVhfAeaBuDP/TvwtS3A/ePAIfYFVlPq2HHTuyulZCTlhbjhETF5yxTQGgPGhoHhIWC4VSXGD3n0tLkMHXHxu+YyB+MlPwDuZs5K6FlsbCzdVO9DuKfkHM8AEkP7B8fOkwDcD+B7np42+JkGOvKdAL4E4K8P0zvQdET0b14D3DgB3D0B7B8HZka9WzrD88N6sFm+YcUjrn7E1ZDvMtF9DBgeAYaHgSGB0PNHCD4BLwLRsByAyX/ij0/dDUxuqlIG5hix7eFhvLcOVUAtyPSydAFmOQNe6EYGV/9ZESiKgIEgtbaD/gHALQC4ovY5r5KwtjOU/XfTAHzzLuCmIeDuMWDvKHBwpMoN0WQzNtAaYSs0K4ZlOSAjGG9kPjCBRwZ0ABKEBJexYAZEAU3A7Oi1BeDym4EDnjQ1TwCGWMW8MXcKks0YOyZNlQOQjcgYIUHllEzYQ0ktm+r6oz8G4F4AXwXwRd8/kO9A0wB8y65KmPxgGJgcqYJTKYpTv2CCzyddQJRDOjKivn+Deh8BF8BnwBtaCUA+YYEyAU8h+c6Az9gNHHRmrgOgmDA3jHQ+iWupCeUAvNSrA9HNwqx+muk9nJVNg/CTfrmbAPwbgK8D+PcHkIibjob5o13A3XypWsAkG1cPA9PDFQDZM1id0i1KxsWfOrKnAFXlifCFFMMRcASigOcs2MGAIfE9iWXplS6On7UbmPaUUTXQrgsVMzcRj5Folg2V5ayUA5BWYKwOxKUafnosWjcJwk+7W5F2EKvlE3xcXaNYfiCYsGkA/smuqug6hcleAnAImPbO6YwRpMgjCAVAm/yQmKTv5hNsAf/i7SyNBSl2a8Qv/4/M1yF+BZSYlNQCnnVrpbC+mToAACAASURBVJcaI7sOSEY2NpaDXLqpR+vE/OVksDgImgGgghHoYJbTWc7oJtFWc65/cg2AYvh2ALsB3AzgVv95nS/f4QdsIkT9T3cBrGtITWZfC5hqtQHInsEGQn3UDDvEDEY/ICf7SxMOrAg8T+c00JGkvHGd2DABUYZIAONzCUDppCFhSukCBsLQrFtZe/IixYQpSyEoJoqnuPWrVRAubQh83HNlZB23z7j1ywmj6CIIqUPxw2Xeu9bx2jx10wz4Z7sqTYZaDD8EIDuoE3hMVEphWg66JIp90k0sBxBcy+iPIIaT1RtEsHS/yIAqw+VSNPWQfe5tlVEk8auXgVa5BUsEJuT5uoliAbE5AGotmIAjCPnR9xDG3TQernYAUupTdBGEFMf83OkApHG+XlvTAPwfuyrgSZOhas3u6cwTsUBVn2gTwyFMi8wjHZAA1M9fYGHDULJD1m8Cpa8fRxDad+l+Ykf/3XNvd11U+qiL39SxXevSsshdDFvgbI1O2AwAtRZMZzTBRuDFjxe1Xg8QEIB8yyj5yYIUxfQIkfkIRnmHCM712JoG4FsdgHHp3ACoMH2G6jM4lWzoQarSvwQ6MSB/vporVaFkh+mCLlpVR8Z+dqDZLoDOpHSiQeAFDkBjPrlgCHgCUaFifg67H/9uYjn4Ai1vpTERTAASBaoQJBAKeNqHlL6mwPDZYAOROag/EYRkPX34MwHIvzW9rQcA+TLpI22G7EcQKlJGsYIJhC6ClUMiXfBTbFUQAej6nPS/OuAl9pOOqIc2BLzg++3VmWgIEUz82cRuCAtLIHQQm0gO52uOAb22sC3JEWgRfPpZf2sQBQIgLydPEIFGwPEj8MlF2bSbsulghLftqsCXq9HGgHysznrGgi5qzTUTFH8FLhAUn3hIJwCN0HLncw37qaF2zoYvuKNivmQIuUNc7GvWt6sHNs26twA6vhyq8NEMAHlyntFrDCcQehyaPTl+FwAbXDcmAKMRThakEk8Q8kPg8SPL0qzLBl+A9QCgR6uZGs3vfHz8TtBZvkgGQrEPBVAUg2Sij50QAOjiVKI3saADJRm7dSLYWfSFDkCem/dhZeMy9pPY5QvSDYQyUJoDIK8qMezh3wY6fSL49PcGgCAA8pScJLIgAUYQEmz8RPA17StvGoBv39W24eREiBoNQSgWNI1HBkdgxJSw1AI+dFIbgOYmkjimQ1r6XXC3rAbCHycAgytohf8vsB/r2KRaRq7zpZ+D37HMX0s3DDcCUGLYaw53MJ4YUODzusqlGCQAOQCejuxA8UULUkxIwAmMAp8Wa3qkN/R9W+sBwOhIEPjk5SLr8HeKFbTQfb77csPIMHGl/4MPbReslPhNe4+MiTpi9AFGV4nI7MfvagNQLh/pfrYnDAS8aJQ42A2w4em2cAyWQUuJVQTGWLs1uL7DG9J1RjhA+jvYk4t3KXeMqijpzrud4At9z3XtP16yGfjKZmCGooYh1tZzvv8xXPFl4PoJYC97k9FlwZWD+Azi/deMZWeP13eQCGEyoERudChIjbb3mJYwH7V0QIKuCwj/gfMj0asn2I0FXRSHXfL/iRkNgLyeVj8ccMY//J1fyxzTAXT2+xoQViKYD/1hDqLxPiYxTgSvQrphphG97tz4Slqafnj7uk1kIQDZrvWTw8B3jwEW+RLxPgSiCERdPwPR7+wCPg/gulFgfruDkOMQkFc5x84e708JAMmCuRNBXi4TIg5CGRzGiBGE/D4E/C2r2vcAYJoify62i0aJSMhB+2IHoNwu0fkcjQ85pu3ack5nIBREqneYFyWLkAXIJHESe00Cyx5QyeL6F/tyEcDcrOW2n7fX8df0mME+/vQ/PQjhoy3gzo3AISYf80MQaQx1peH9wb7v2mrtmCBkIMMejp3jIJD1MsaxaMZ8v5N/67INAsB3BAYU4JL4DSo1J15AFPAEwuQHZJzkKfUAtOHLJSOQRWndBYQvCQA01cfnNopfsaCJaD2baBn79QjSTiOEP1EcawIpkq2kegBTNgHWEpOKF8Uwq2NRFPM4AqCf46/rA2U9/uVDvurB01zvAJpiiwOl3fEeciCGF+Ij11f+QkbSfMPfIzqw57mEFZ9Dl3Ps5HXWAYByHJAJKV7N+s0cCQQhwSlfm4lGZ0KB8C/rABgZUS6ZHITBSEhCowUYAAksF7cStWREyxRwtuPpOlgw+5s9sq6OaIJIIlUgEhA1edoTgHxa9HVw5jibZNF+j/9yGQA/7pbujZ4bwv2+cWB6tFo0NzYnkxFA+cvEAo43VBoEo2e+48EMXEOmD9F6xhCE8RwZEJ80VblKvDlmzwicfqy93/o+8K8TwB2jVSgW138FrJQTXBNlnJgmrjZwanow9CBP/rL9wF0jwAGWDtFyoN9PHutnIHT05mPXz93dMGQAPniJsjiBXiTbxDZFMF9NLUPQxKR5qezz1Y6/YZDH0D6GkdAkYJIvRalAdHAMmPZoYhb6NhDWvEyf/ma737CXN7R1ZC7hUbPgcFgqt/ZZjADnM1xqEVhYBpb4CUk5UsL7jQvj///5buDrLeCOEeD+YQchYwG9VIfyg1NaZszFiCH6DkRGLze5/dgk8IMWcMCjdCiCzR8od1B8OTwvJM8JEShFut1fzMhi+eRJr6LI7hYP2M/xVLwKNoZjUTwRMAQQmYyhWGQxsSADOflZ4kukj7PhZ75bETjBpkAGahMkcrGgwhsXeCyBHBj1wmOBQwvAwqKzoFeRV8ZaerjKYAuirmPY/o9X7q5Cyr7fAvYMAftCPGAEoYlBiVtFwLjtp2U4irj7yOANbi+crHyrfCbTquJV44O0F1FrwQGIMZFqdQDyP/gGSZ8TC0ZRRsOlVzzgasd/u+zpMByLehAfCgMQCDyGZJHFCCgLZ2f8mgI5qauEcVx9e5vACTgCTwEMWr5TdIpWKJb5MvrnoocDswvAPAG4VLGg6UKeqmi4iuDz4er30oX0FP7u5moMvIf7W8B+jwlUNAzFnlZCIhvGFRCeWzrgXSSIBreXTFZSgVLHAp4UHOFuociEEsn2PJwl/XEk0dzfSojeerFg1IOo5BKAveIBex1P67lgUzgWQaJwLAKRH04i14ItgDKEtGsRnWx49b2Vkk9wUefTGrKCF7R0JxZMqxN8cmPAxWcAcxGABKEAKPA5u9lEaAbCmKMI+sDN1X3z+ro24wEZFc0VEE64ABgT180PF9ZdBcDb6JpqcPtPk+1ACbmKjJnllwyuILunEAWjZHkBsrsRUnfD0qEiC5IJfyisgMhzWhcP2O14Ro4WbASgAMQJ48SJwchmBCDFa8qpyBbSP7OvU4PQ0p2W7+LSnSJUFOrI4V7w5IoBTQQTfJ6oTSYk2mQcpGRyH2syGjIF6EM3V/fM++C1CfwUExhCsmzCaQT43lZC3e1hBpEHh36XEqrB7Scmq5dV0XZxmV8WuDFzAF9iwhow9seAGoBcGtKjqAc+1l9rLb/1igesO55ysmCrC8ei6IxRMAKTWNBi6Xw98xNTFUi0jEcmpYgRAPhddpVi9OIEPP5cYD4CcLkCooHPwaW9kV+iwWrQHT8uA1fd3F7DFvgUHUP2k8jTiogAqLoxFpDgbMj9jXSuN7i9dLIdaxzBp5XVBMIMgFEnFAPKT9qPd6A9BIGI7MfPmf4U+40HzI8nWgq2PBxL4FEkjKJixGRRFyQQPzzd1iAUzCAQas1YOmAEoFjwkecDC/PAwhKw6CxIkCXwOdVJLxTobMjBdyIgfvimNvNJ7Evf4jWtdnRYD1YNGVuG93VWuWs4Jf+mlZCCZxwP/cnJ6mXVKk2+tK8lQQVHRTGc64SDAZB3Ey3JcxyACkToJx4wHl+YwqloGDICmYmTFgMQFBET8yyYzyAG/AfWX8mCGQg0BTRoHwt9KVaPE/HQ890AIfgWK+CRAaMRYnVdxHbhdY8Wslw1V93UDsmPIj9GxgiAioRRMIJNvoti+SW/Ikd0gwAU8+XxJcbGITJPDvI6XdCFREFSknTB83xka40H1PGF9dnycCxFwygkK0bASJQSVAbAYeD98xUAe5U3jKIwBosSgNsuABYogl3/IwgFPrOIg1Xc4ZrpAsSrvruykl2ucykapkMMh4CExD5DwJfWAYAxwk4MKPAJgOIjGSEGwuCakRhemw6Yv0UUwRf7L00L9pnsNx6Qx4feY4O8pDEcixOjsoTKKpMYjSFYYjOC8Eq3Wnnr0YYS+0Tmi2HysrPGLqwASNYzBnT2Mz2QD91laxLB0gs12GAh81cf/o/OcHyJ+qj0S/zxnhUZbSyYWaL8+Rq2S29wowiWkJPan4MvgrDDGAlRe7KIywDIgR3meEDWg9HbJgApNTkXo8o0i7oVgxnEgFr8F7jEdnU5GvqfJQKQKyEOPlsNIQvyvupAGHS/Okv4qv9oh+PHxMLk8ggBCRxvAmEN+AiEzz2iQfQBeNmkh4K52hJBKOaNe/FSLobLRXCz43rQnu2yi9oMSMDxs2jo8303ERz1wsCGZECF4kd3DwEYYwJjhoNlQrgIjlYodbBPrwMAZfEmyzcIv27gs6XDzC/IR1DOgA9a6DRz4wZAsZ+LYXvQYsHoD4ziOFklna6YD3+nnU6dZ7bGDAcBUImIAmEUw/zbJ1i/scGNDJiLXmle3RhQ+l/aq57gUQCWzwwBKPeLsZ/LFrGg/ShRXAe64Ajkv30kALAjF8R11Dy3K7KRwJcsUTaqWScARou3w/INVnCH+A36n8RvM3nB5XP4oD6DATBYwGb5ajlOLOh6X8JaBKRG77+7ygGYp1bn+V25/01AzBnwQ1ypanD7KWfA1QDYC3zJIj7KgOUzc9nFbetX/r+O5biwNhyX5uSEDr5o0xsJwLp8/m4A7GaJUv/j3/5+HQFYJ3oFPPkho/hNeqBcMkcB2BAA6XrxmMBkfFAci/m0JpwzXw0TXvXtzrz+PKc/Ml/ugzM9MDqCAbz/keVjjGcQA/YLvjoguo1mRslRI6RwfsiA5nqhL5D6nscF8gfTdfxpS+/hLzvWfzMQCoB1Fq/8b3VWaPIDZqsRV64DALsZHVHs1gEvsqFAeBSApQC8pHK90Oql4UEAyvCwNeGcBXNLOPMLftgZsI75ouUr9ousp2TEyIJ/sU4AzC1e+WIFshyAHPZREVwItrrD3wGAhibTYBhxVpe/xePyrNBuWaoNp3DgFwC81O+RAepK/a5Lfe51jxr7JwA83nPXYgq1asl0yX5N48+f4VEGLATlK1vAo5YB1gBSRmsM+NFE57lcfPD5pPFWCJImtyvGgGfOAacBYO59zFglgHgPefZsXV6/gPXBYeC0RVgyJNOGYuJjPka9eHWgjL9bWzhWk0/n/wPn+k8bgFNmgYcsVflZnBRmIShtJM/m7JGibGBoOIIez9wKPP4AcNpylfbNlGfdI+9NjBjz8JVzppckZuJ+dBw4aQ44drk6j1LIY9JkPD7P4s2lwVEGLHwJnncscNIh4Nh5YMsSsHm5ndOu1BGFThJ8/K6JrZtoslST2+XHA6ftB05ZAE5crgAups5TfaL6EF+UyIif3gAcOwtsXep82eIYY9JkXpMgMp/AeZQBC2b8OduBYw8C2+aALQvARgJwGZhY7swEzbNa88IRvAVO1qkF91J36DNOBE7eD2yfB45fqphLnevzdGeBKBfL8UX5/CZgyyyweRHYsFwxYHzRNK6oetSBMDLjUQAWTPqPngpsnQK2zgKbCMAlYMMSME4ALrcnR6JYQIwsoUnjpDRstOLy7cBJB4CHUGwuAtuW2nUDVH1EFUhycSwWjGD64mZg0xywcaECoI0z5P3X5P6nWlHdgHgUgAUAfOYOYMtBYNMssHEe2LgITBCADkIzSJZXpCOnIg25uPrhgnupO/TyhwLHHwSOmwW2LVSik2pCrDsQskzNIBGIpBdGI+VfNgMb5oENCxX4yPRjPj4xaJ0+WGeEHRXBDUz2Mx4FbDoIbJypADixUAFwzAFI8KUJChMV2SUaAGc1cE/xFJef3FYRti64nkqWDrqqEhbrsm5zvZCdPCd8nHzJOLZuABRz9hTHZwPL7LnLnoNMIY2VyaKcjtZLHOAbNgNPngKe4BacfGF1pnydD+hphQ/8XV5UiEueLGnDN1tWXj/3/4cTwAUzwGPcRcFJiDpPt3FLmf5vjwE2HAQ2zPrEzDv7OQg5OSM+ScYQy5Xbo8465u/ZfLTJ7fKHAdumKxVh8wKwealSE6inEoSy2MWCdbUHIghv3AqMzwHji9VLZuDzD8cXxxWZs5c7apmW0fMBnIHKn5X7d6I5npvRz94O7LgXuGIReJSb+Xl1tzqflybwRwqf9i97BQRWomWJQ7oZVFtJoqDX/b/oGODsvcBTATB9gsfGqmzdjtVz+G+PAyamgYmZCoDjFE2anCVg1CeJwOMnTRB/DmUINVkkgia3y08BtkwDW+YqAFJFMD1VAAw6XG61R31O9/fdrcDYPDDmY0zjc1UjivBuAMx1QdMB+WAYXU8dhEU16dOSkppbcHFSrng8MHwnsGMPcN5ypURHp2xMIa7zDz2z8Gn/kVe0YomO0wEwBYKujL7v/zHA6C3AxfOVh58g5AsZxx4fZM7sf3h6BcDxWWeGBZ+cMEFiwGEHHRnDzun7ONHs/djkRgBunql0VDOSHIDU3cxSD4aEajhFXS4H4S1bgVGN0V8we7E0Fh9jVDG6Obr1LJMRwn+kOCaTEYT0dsfqZHXl/p7PrLi9wIY7gO0H2yAgCAWCWCowKrYE8nMLn/a7PQn9X7zIJPPkCcK+758y7x7guNsB6l98gZjLLYet3Ay5n0sv4R+fCYxPA2MOwLEAQLIDPyP8uBg2cRYmzFweAYilKkn+OC8/Fdh0CNhEA4nGA40kd6FES13WLO8v1qHKAfh9B+DoYjU2Ak/js/8NAIwg7OUb7LCC+WAfB4CpBJoIiTRNRmS1l13kqWh3Adv2A8cdqqp1MB+aIOSxWv6pq5D2kkIAvt8rF7BLJksN/jMqfa7v+7/Ak4B3A6ceqpasKMq5akAmlLWY37t8ZW97PDB2qALg2BxgAFwANEGcnI5JcrDZRPlkaXL4u1KJUAfAjbTQ59x6dSvdLPXAgGYshZWR6JIRaXB/NwFI8C1WwLMXzMeSwLfcXuKrA2G+wrLCDcN/IIg4ERRn0qvyySAQX6mG1XuA4fuAbTOVwktRRr2MLCoQyvEZ/UY/WwjAj3jtFJZkU79g1ghkgEBf98+0Umb/3A2M3lkBl/fOcdMok2EjkZyv8773LAfgHDDKjwNwxEUw9yailpwdxBAEYhBbAuGzG3aKkQEJwAkCkOCjlb7Y6SYyf2UwlAS+vKYnAXjfNmDEX7DEfA5CjUcsnzvbu1nDtUMmCDkRZEEyGdlAk6G6lQTSa6m0MP6HuY73AxNTlcJLZ6WOJYC5/CNxLpHMgdKIKNl69Qvu6/75AjHOiTU87gKOOViJb748BKCWrnK/maTA+58AjM0Ao7PA6Lx/xBAupoYDC9okBRAmPdBZ47lNA/DhwMRsxX7mPgl+SrmK5EaRNRslXFQ9CKB9DkADn79cZtkHFkysJ103eBbqlh97DpmTQTYgk9VNxu+xYbXKU3lhFoJPOgdFGY+lPkgQxokkgF9Xgj4AvfoFs84eX4Ke9x9fIC+tRfDxvvniif358sSir2LCj5wNjBKAc8CIi2AxxLCzIAGY9L7AhGIKgpATw4l8wToB0JjPrfTkp+SLQbHrOqm5jNyajS6VCMIpApDAWwQ4LrGgXqzIfnq5cv0vN0ZXHTInME5GBNLb1DGdOYQsI7AfGKFjlgqve8wJwG4T+fuFAFytXzCLb+VgWnH/fIGYfc46Hs7iHC8ZkPcdXx4VfVXJw8+cA4wIgM6AHSLKWZCTESfLfg7WsIyRF3ckiRQ+HACXkwHptyP4KHrpJvKVGnOhRF9eBF9wE0mUEogz2wC+WGI/vVxiQQIxAs9+rmHA6E1YFYB8DJwQMZl0OrLZ++i7sfT8zroYHLS9df4RACWKxSZvLXzG/fQLZqk2gqn2/vUCUQ9UZaM9wDaPeSPrC4A5C1KV+NITKwCS/SiCR/jRBDlLmP7nHynsxno1IPwJSyRpbiMADXzuPDYfZfBTEoAmcuVQdiaW0zwXwQsCYDYmMaDA1wG8TBSvaoR0G77EcGSET6hjOvVApfRPAUN0zjr45JzVcSqiTxD+VeGzXku/4Nr7JwDJOkxFIwt6j6+RqUrlkO4bXzp1gCAAv04AzgLDDsBhKugLFUvQUhTwCEKbnKCw14HwJ9cDgGQ9WegRgDI8XEcVEDvAl7lVlglAgi+I4CR+Zf1mLGgMmDFhBGFfDCicRJFERviSABjLS7FC0MFKMU+07wOPE0kGvaoQgGvtF9z1/iODkwn3VWoEXxres5ib9xx1wZufBAwLgAQexbAD0JiQwJOuJBA68/H3Zhk6+3CifqqwWNMKN8wjKgbk6gWJgC+FMaBb5vJVmsUbV2vCqo3cRWZcCIACoax53+ulkqNd7iqOcU1WcC9cxEm5kQBUdZ+sTnSL/jEtTWngi21jhJNJBivZBukXvOL+yYBkcOqxKjJ4AGgxzMrBVwdAMmHrZOAYF2l6y/mwV6xD17zmWo6MbRyeWtOHwxJ91IIhr6rqZS70DPPLXDVUrfBwzHKr1EUp6/h0T/6L/GcCqslt4IhoTcwdAqDSs7I60WQH6R329pHuFyuXDJmEjuOSbdB+wSvuP5bGUjmsA5XoUvcvBXKKAQnApUdXwah0b8jXR2YzJTsC0ZHB33FL+2yiX3h/1YeD1fFZGT81g/H6yqkVa9YEpqMhTADle8erHA6t7Mh6j4ZBXdBGjFyO4CSIm9wGBiBvgqxwIAJQlXIyEJLyI/i0SkAG/FbhaEr6BXfcv+5dLKhCg4z1C1HEBJ8+BODQGZXfk/quAZC6ketAZEQCTWAU8PIJt0fgwHzZvVWNaKqi7JLOmtDWFy42g1FxH/XfqGkII0C+a0tnDkfsGxQjn3VPsk7tXmuy+Xp0JhtoJosAaFcUAJUYKiYJxcqHqKAH9rPlG2cMrmCUbMX9guMLpGTcCMKDlZGhMK8IPnPIn1X5PA2AwegwEEYmDGBMjOI5whGQP3NPBT7VJlRNaKvF4t2IWHbDErtDlSk1p4lJ7/zd246tglGZryIfrFhQ7pU8WCAX0ZENG+57U14Z4YrCeLrSxXdev6TfLwrbxT7znMrfKQXfHLQCnyvmRIv0Q3430ezMmL98P393G3wqz6am1NYzzoGn+svqRmTAU2citctqAX/2EI8F9ACEmLHXLZGoFxtSl2xyK2bAYwrj6Xr12+1noL/jUTCD9vvFrn6u0v1/nvGkaoVBAQi0eummMAuXQHMWJAA7gCixG8U0gFfcXdlBKk4Z6zELgAJfZEKrxpC1xOIl/+Sk7jkcdYlSco90y9+gK6vJrRiADD0piad7RuFo3udNCgft94vCdrGXn+tujgV3QAcHLcFnroelivHkchEL8ue0uQ74S3eubAITS3IQhKkMRjBMokgWG3L//2z3VSnP4VDgQWxUEEUxAZFHL0eR3HDfm3IRbDHkBfF0zy4EIKNhSvr9goGEBdvTz/MIYQLQdVsTwRTFDj5jQmdArRDYJQNDSs961R3tPhx5NXoVgoxleHnarjohgLec3D2HI492yQNvIwvqO9fJm9zKGbAwnu6FhaP5pFuMg/b7tTbpBdvTz68cz/zI8azVj8iAHTqgmFHXDUB89R2dtaC7tUGw4kDOgFb0R2wYRDGZ8g9O8aU4XwPOczhiwGlMjqqLWiFYGu570wADFsbTvaxg8nkow7E8nM/atfKzln6/1mS4YHv6BQ4+Z0BbqHcd0NwwYbVD3+1yWhXJxPBrbq8AqE/XApSqAxiBV2MZ/54DMOZwKE00rnDUWcR5KiV/brjtSAMALIyn+/mCyeehjIYp6fdrvVELth8RAClyHXxmhPi6r1m8FM0ucgk8+y4RHC1kAK/5XgW+2hZYofafWcPq1B5AqDqEYsQ3nepR2gqhV2yiol1COkD0C+aOaoGx4aL7DQCwMJ7uVwomn4fm7VrX2u/XAlELth+5sHPtN+l/Ap6sX2dCsZ/phZkIJgv9l++1wbcq+2WFv2NXIjNKAPzuw7MUAV8DTuynFIEsQy83RgTAhiv+NgBABaQOGE/3mwWTLwAqHnaQfr9GnwUbARgDNBUlkpzQboyYCyYDYdILdf0l4NduW9kGoa4geNdazLElKoA3Prx7DofiETtC6XvE7hGEzJlpcis3Qgrj6d5UOJoYDcMglrX2+y0NPtl5UZUjkfx/Hqbecoe0OZzdF1gHQrln9Bhee4s3f3Zxm4MvAk9VSFdUIw0i+Q2PaBtISiBSSFgCYMjMW00MP7pwvvLDmwFgQTzdHxcOSGvBg/b7ZRZByWYAlOERluKM3Ra9CKWc0q73dTBhMFT4ZwIw9l5Lrpes+HjeBiGCUOKXeuBvPcKTiEIOR0f+RhDBMYi0Lhea4GTaa5NbOQAVDzhgPB1La5RssV3rIP1+7yy5OAADoAchEHBkFbKfGRpiweAPtMs5IFNokyOGk/7rAYC9OhBFwNXVY1at5tftCBHaWVS2AJdEcEinrDNC+Lumiyc1B8AB4+muLARAXTDCWvr93lR4/Z0Xt6ODFQkj8WtumEwHTKDLQejAfN3uds/dfjoQdatGLxb8jQBAYz6/boxiFgAVudzNIc2/s3xLk1szAORoB4yn+2DhaATAGJCtbpkCYq9+v4V+aBgAQ4i66XtaC85YkDog/zdZvzUgfN1N7a633Xqv6fe9msDIHfNaB6Ay2JRE1AHAEDIfI5nzZCLeN4Nbm9yaA+CA8XSsul6yqV0rJ2WQfr+splCyCYBR/HJyKX4phs0PKBZ0lqOYTpvniAiUAmAd+HKjo1cvDjHgr+3wPJQsVCymUZrPMuRsRBDG4AQCsunyJtFGHwAAIABJREFUcc0BUJlxQoH62q8ST8cggpKNAFRGwCD9fkuvbwAkyGgJE3C+Nz1P1q9/T3F1EZBxvZh50s6AEYC5yyUHXt5/Q8zI5/KrAmAIkkipkyGPYwXz1aRT8v5ZO6jJrRyAvKOvNXlLazsXs9bo/ztc29Pohgotp5J49Rcj/pzfIwGS//3OM4CNd1dpntQpFUmjEH4LYIgnyn/OLjL8FeDGhwJbNgFjI8DIEDA8BAy1PFK7FSKf43cNKrvHx+8C/vmxwMgmYHgEaA35J0StpvvzL/nP8RbLAfhyT207TChgDRiu/ZL9DsfWNABvYzbhCDBKoBAk/pEobGWTqp819hzQ1/0k0PoaMDEJbJjxVZFgDad0SaUO5LksWVj+XScDmw5UEUDJ6U4d0nVbC91S3ovfVHp5al64cgC+k7mZAP768KCA0WD3A/ieLz090CDceVmlAuhBljLgrfcAw6PAyDAwPFwBkCAbItM4a/FiNtERjBl76W9ffD2AbwJDdwFj+6syImRXrd5Y2FjIYcnzWPLEqnsfC0zsr6qBMQmfIDR/pyJ6xMhKyMrSDiKD2xja6TADTt0/AGAs1KcAUCFrOLF6tbtiRVFavT/wuMCa7MfVTlH098YBeBcwNAIMEYAUlS4uBULOmK3LCnwOPANlEIOSoF9+C4DvVoWXhvdWZVOYqWgi3vOXDUQhgieB0EElViMYJ08HxqeqnG8D4IIDkAzo51DKQQJvBKUmKACzbM4+5hUivwrgiwC4LzvjmgCh6nBcgiMTcv9Abo0D8E6g5eCjfpUA6AxoQIzgi8ALmWwC4z//DxcPPwBak8DQFDB8yJPpPZHeGCyC0KN5DFCByfh9/+OAsekKgEzCTwD047X0SCPM1IYQjCv2E/MJoGVwUUQoPboq0MdqkWVn7RtDDMahB4g+P6qhXFpjVtkDtRGA2nKjos7IyOyHFUbIrXe0FXsTuzIYfNb4O2M3ATGIYQOmPn6hG6gi3eUkQQAeAIYOAUOzALMVh2pAlESqGFBAXAYOMQVjxll03iO/yYKRAT0FQXkwZkjp1pz51LO2XAT3KtD3AIAwj4Wg05kfiuUHYlsXAJLVnP0INLM0OYFx78AzcRySeTsw2AJueI+Dj2Fne4EWKz5MA0MzDkCCkAByUWqsJzarEanzj2zXwjEGFHuGY+pYsMojzZL1G9EBexXou339IRBrC3lJGmNDuSHX+w7WC4Cm6wWxm8DngLTImgC8pBcGBuTXf/1fXnyTugnFwxTQOgi0CECyIFlsvvJfEnh0mhsYI/s5uxFYi1xZof7oOqSAawwYjRGBzYGXbtWXaCIrlvHUagX6SP/ruMVYCEbEqECXAMjfree2HgA0ESur1/0vtnNwGSsG0RsZME20/+/XWH6Mugk/yngPAGy5GDYALjiIHIgRUIrsZjM7Ax+BSx1S4pfffQVIep8dL7dMDsTGjJB+CvQxTHmdtrw4l0CovFruC2NOe975egDQsCXRK/eK634JhBK90q2C7I1i+Gt0jxF40k1cPJAB7UP2m3MGJAAFQrGei9iUTH9yBUDTHfU3B5+BOIKQ43BWtNtPcWIOzEZE8FoK9K0DCGNxLi3FqaKA9gTgeoFwPQAoI0OulWT11oEwiFz7cwbErzNxWtEYBB+VY76Vh4DWrH8IOoGQ7Ocg1CqMRLPltmxvs1/SHaP4dcAJePYyyUCRIzrTB8tE8FoL9DUMwl61kQQ87Rmy2PS2rgB0a1ci18RudEJH57OsY02y/+83/sZdBKr4FXQTApBvprGgQCg9UEAM+h9F6ugJDkC3gJPBEvRGrYoYCBX9IxEcS5K4i6cZAHIw8oXQ4mLBb35YH5d7OekadtTV1UZSjaEIPH4nQzYNwgjAHNwDuWGYpZc7lzPfX1cQur5oBorfzDf+zi0yVTuSkuxBI2Q+PhQDIUEnMLo1TBCZLufGw/ixbQa0KB8CTODjPohdY78IQmfDjmW7Yo/doAX6GqIiAtDHaYswSmeMubV81kp11L6hy2PdAcgblfslOKC1IiKRmyRxZgV/8++DS8BFrxXi5Hd/U6MeSKdqEsEKhpBRsgRMbAtuG4KU/+9ry5brzP/lPVMv1EPOQegharrVcgZUhVHFxNPcp9VFtlOWkL437C0WABWypFRGsV0sb5Hn2zYBwvUGoKl10v1knDgo0y7XA8Pfv0UACnjaK33Co9gJQAOe64FkNvtZAHQdjz9v2Nz2GSa3jYej2W3KGuZ9ixGdIVSoKT13B2s5AHkGheST6qn0erHv5AIgAAU+LVfw/wq3CEAV7clBKDDGZG9/5oVXx/oyYARczcqH5GyH8eFplTawFvAtrtXLGpNrQDGbejupB3omlIHQGc/ErzOcGSRs8zrhAbbuL1Tco/JfbLlNwHOmi2kIcs3owbdwNpYtynDQhsFcgvuG9/YapGFvYX22zZcAU0/GwA2LJ/4AmGF9mwEbBu98Y3cMF+uAGQCj2HVp3BbPuo3IlqxAy5wHAq4OfARmEBXGfNIBa0BIsG0ecwC67merHgRpZLwocrWaovuTxew/V0txJQ2DWeae3WAGbdhb2DB4+wRw7w5g8Qpv88liyGtoWHzMi4C9fAEHbBi8kwUKu2xNAdBxaGBLbJdZux1LwAGECYAEm6wyfpelJrEgFnRDxESwgyUxIUsVMwjVy5AYO0bG89Auu1/5BF38KqjBHlUAYXsteNCGwTeWNuwtk4JMkrlzGNizA1hm69g1Nix+zDOBW0aBeRZZGqBh8M4emfWNADDT+zqMjQyESdQFHfDbZECCLRgdHeCTe8CBaKJY1rDnBRCIAuGW4TYAZeFG8ZuMkGiQ1IEwGCJtHZBmy1obBsvVMnDD3jIAerti3LEBOMjGcOpa3WfD4ic9t6oveDtLfw7QMHjnH6wPAybW6yaG4+8D4HIQfvtDIVtLejpBFsVvUI7NIBHw3DUjRzL3rDVtsYPOkAScuX3coNDynT2VYJCkn+PjqvUD8hVbS8NgjphGxcANe8sAGNoVY/824BCBtIaGxRe8pLKZdpMkTvXiJ2toGHzSNHDPScAyq3er4qPyGaNc7JCRXWLT2TjwGmCOeQashq6+qSpZmp8vojQpheF58ncdZVjLnjWPHr4VWKTKxrHGUqq97qXu3jp0wPy+eEC/DYNZsZAO6IEb9pY9lNCuGPcNV830ZmkM9dmw+OKfbdcXvJMPdY0Ng0/7GnDXKcDMccBS7MwdKz8KCAKQIgY0MWGCtr4TOHAasMwOkTqf6unyuLykfd254nkb7qsw/iVg7jhgmSX31Vpd9yRHeLx+zRhjEGRbB6wDYT8NdymyubzDzCCGfpMJWfSRYfr9HP/aMgBm7YoxNQHMbQHm+ID6aFh8yS93tAvGQb7da2gYfPoXgbtPAqaPA+a3AEubgGU1RM6B060fgkRoCzj+TcD+04CFE4BldZdRc4/YxlxgjJMewSiwN1zWfsOngdljq3EmY08vm5i/7j5yIMqpvupKyGoNg9lngYosl9wY/0dZdrMzYl8Ne8sAWNOu2MA3zw/F2CoNiy99XbvftrcLriz6PhsGn3U9cM9xMODObQYWCMANwPJ49UliuW6SaqqBn/gGYP8pwPyJwNIxwDK76ahDeN6uXYCuYyABkEza4LbpY5WEWdSLxjF26/dQB0SJ6r4ByAN6NQxmkWcqrnQ00x1DEDJFjR8CcNWGvWVPp6ZdMQ6OVOCb3wAscPJ6NCy+7PerkP5Q3tBY1PrT9tEw+JwbgPu2AlNbgVkCcCOwtAFYcgAuiwWlM/XqDjMEbP9t4MB2YO54YJFMo/5gHIcALV1TRZ17FXOhPtvgtvkqf9H4kvHDlyKK4l6VzvVSBF22uwjOb7pbw+CfcwBSkyeFEHAUx/yw9JTyEbo27C17Ol3aFWNuAlgIn9QxO2tYfNlbK6MvaxeMRYquvL9rTcPgJ30TuH8LcHAzMOugX3QALo21WXBZLEHwRF1OgHS2eOgbgIPHA7PHAezNu7QFWFZ7JnXJ5rnqxHEulvlzwyVNN3+wern5Yovl7SXLGwvn4riLWO4fgMRJXcPd/+pmOymELEhRzBxJAo9gVL4kwVnbsLccgHEpWi3epocCAMeBRU5eTcPiy/6qtl0wpvhA+2gYfO7NwOQm4OBGYGaDs+5ExYDGgqP+ccAkINaVpB8GTv4d4OBxwNw2YGFrxYCmV0YxLNYheCXau7EhV3ga3Lb8g4+R45uoGLADgHWqhsBXA8K1AZADyRvuvtkBSArh+i9DsQhCOtf0UUgW/7aiYW/Z0+nRrhizoxXwFhyAi5y4rGHxU66qAFhT3rDSIVdpGHzencDejcDBDcDsBDBP1uX1CMJRwFiQIBzxieL3KIY1YW5MPOxNwLRb8gs0aghAss1GZ1O+SFHsdRPt0i/PLHu++dFb/x4mXfhcbWxhfCtYMFr/uWvKxfDaAcg7ipPCvFOVpuo3HrCjYW/ZA+rRrti6TS6MVQ+L4NPH2nx698GnXF0BsKa8Iab4dFZpGHz+JLBvApieqAA4J8CPOQuOBBAOV0CUYbIskRkAecrvAdNbXc/aDCxSpyT4CEIyTgRgneiLIp3nP6fs+a4A4N8B8/48CUC+ZGJA29fpuLmxJW+5h5kNFg2jiWHSi0r0Uv4pCoZsxw8DUfnhd4Vk0XGdGvaWPaBV2hVjdjgA0BlpkQ/K9bmn/HOVqtClvKEBqlfD4AtmgP3jDsBxB6DA7tdbcvYzJvQJkii2n4NOeMpbgJktbYPGACiF3wFoEx1ZMNe/4jnPLXu+KwD4t/5SO/iMBcXuesHylyACMBPDgzGg7opM8mEHIGdwrfGA1rC37AH10a64Yr4APvvOSdwEPOVbKxu+K2pdKRTmdI3dqkPPVgbSTBGAY8AsATjWniBdx0QxJylOFCcr6HBiw1P/CDgU3EgEIMW52M8YkLolQRddIN1AyKWiBretf9MJQN6HsaCPxe4rvgDdHOcOxDIAcmDFDXvLnk4f7Yqt63gEIB/Yoj+4p9xaAbBHeUPM8qF2aRh84QQwNQYcGgdmx4C50WqCFngNsgSvQ+Dxu4MuiawhwIAXVk1O+e/A7CZgThY1dcno1nHL2oDIyZULpBsAFTBZ9pjT0QQgn2V6ufRicS8QRgbs5ZYpEsENDejBfpoLrwAOjgIzZMBRZ0AHoUC+SOA56xJwNlEyTFw5FxBPeWvlzpnbANCdQ1eSGTRybMuydgMggVBsKmtYoC6Mt8znZxsZMLzAxoAOvsh+ydDqtXx4FIDl8L/omQ7A0QqA82S/ERdTI22mNfaTuBIIxR4BhKe+y61punQC+MytI/Zz/c9EuvyBeetLAfGZ5WOMZ9j2/gqABB1fMLsHAVBqhfTcyH5d9MByEdzs+B50Z7voGZX+NzNSsd8cwUcG5ASRKYbdHRNYwhhDIHRgGmO0gFP+HJh15jOXjnyKblVT5Cbfoq+yJOszF8P8+VnNPlICkMAzds/YLxlYznrJwIpO6egTPMqA5ZNDAB6iCCYAyYBcBqTRQ0e4630SxZyQJQIvMJ8mSeLrYe+p/GzGfnTpEIBy6US/out+K1wg+brs88rHmDOgAVCMnrEfxxMte1Mt6j7u9zzKgIXzczEBOJIB0BnCJoqgIfDEhM58SWzJEPGJe9hfVH42un/Mfxl9bgSiBySIBWnAJBDGEDAB8QWFA8wO3/a+wH4+rg4RLPYLul8tCI8CsJmJMQAOuwFC9qMI9g9Z0CxhZz65K0wfFBPqu7PEyVdWAOTHVlTcpxhXHZLz1w0ZA6EDLhkCskRf0sw4dRYC0PQ/vVSRAYPo7QCdj7GqVOSMeBSAzUzMxZcDMwLgcKX/zbv45SQlHXDIgagJc+bjZBqAWhUoH/Y+B2D0J7rFa6LYDRmzomsAaOeKqxEvbWacHQB08JkRIteSXiSBLYJOLB+X4xrzAzY7vgfd2S4RAKkDDgPzNEAIxMASSWF38WsgkuXLyXTRSRCe/DduSZMBMwe6ObTd8JBj24Aot07uDObPP9XsIzUGFPs5+JJ/M6oT4buxHv9X7BeY8KgOWDg/Z58GTC9Xq5FxTXOw9c3Cm6k5fPcjgbHbgAlvVG2tH1T3Oavoq6BlniZ+12n5u/2sDbOvasqoFg8x2Lnbcd1GdhSAhXN+7qMrAC4sA8sORJ6yHwD28z+Ft4fdv8UyqUDrDmCEBcpZ39kLS6aq9l4D2rLb/KYsFTPWdfbvh86vQu2s1K/K+zIjTsXIVQ9a59Egs4Y6sZfIA/EcSp/jEXv8BWcAhxaA+SVgSQAkGAMICcwVlNLlqTc9Gbv/HAA7MrL4+f1VlXwrUq7SvCoyGcrrWpGhuur2fNGYwM8YT67hT3s1LaZvqn5MLM0bzmHMmIFSgdFNj/mIBct63NhFZwEzDsBFgpDPeanNgATfCtGsX9TIKwNrg9tuVkhlng7TI/YArX1VkXKrEe1l2SynN1RCsFJsqnQv3UIMxhwIRjU5AGN9QUteVz3BUAvahuNgjC3HxLAND7nBp/cgONXF5wCz8xUDGgCjKPbvevlzcKUHH2ag6cnYzepYBB9Zi2FxDJdjoXJv1WDFiLJ6MKqKZUzoQFTfj2HmwTKcTpVWvcxHKm6kKgoORAEvVclPD6NdzLXpMT8IYNPcLV7yJGB2AVhYrAC4SNA5AxKM9ryDPE5fs6eeVKWGZ2M3S3MQfEyJUKV8L1ZpJXpVJ9pLilmlAxWkVJHKwIhjjD9TtVXVm1HdOy/pJiaMFRWM+bo0rWl4yM1N7oPhTJecC8wRgAttBjQWdBBGESwgSiV0Pb9DRgu0TY19N+M1mRKh8niqFx3rRDsLqjgl9yaGXT80vcL1wnE252PAZCzAHQCoiqoW3yYWFIt664fUpKaREr1NPakH6XkuOQ+YDwy4FMSwgU8GSRSz0UJx3Vx/5vFNbrs/EiLRY+v4ACITww6iJEodQKwBIyBRv9vwhKzUW6z66TUGEwhDS3ezqusAyNxnJn8xa1KRPSFts9YfFB/QDZcAm78CnDBT5U8rCqjfc3yh8Gn/hGd/MsKf1+QzYJ4891Jye13iy1cAE9cDJ+6FpYrEkidxDN3OtXR+FwBGMezoMmxJLOumAuD4J4rxJrfdH/XCoLGFVKiUbw+LAPQqWWaMMLrd6/+JycSIm85w9lOpt1j1MwAwFTiqAWEUxeYH5ENn/jInUVHeMXQ/f/jRePvCa4DhTwLHfBc4frGqqaNJzLPw6iZxV+HTplFGvZrXZT45N39+HW3TujlZv8D6fp8HRq8Dts9XIOR5YtakgBgdrrrt5Qsq8Ssd0BhQ4HMwmVitAWHAY/LbLDQNQDaTVJ8Q6W4qVB51OOqDZDPVB3TLOBepW5jmqaLbec3jGgBGMSxvvemDYkQ9GoKF1ShUCSKCqBeQrvmfVZPC1keBjXcCmw911tTJ8q5XgOLaQgA+x/OdWA2EGZ98gbjleTHdQHQN+2iwls3nK3/Zhj3VeQhovYzdxmArSwQgDRA3QiSCJUrTnjfl4KozRCSCCeYmt90EoJJbVCk/1+FiCwFZxLk4dRfLFia6x8LbYkD9v9cXtLG6+O4AYQRfrgPygVIcqyhTXcWFOJH8fh3rz7EKwnUArq8mcGwK2MCC1i7WY7Zenh56feHT/jE3yliE4TZncd636gPFCKWavGhcRx2J+cvs9MlSw0Ty3cCm+c7n0G0MExdW4BMIbTXE9UCynvyCCX+Ovm4gbByA/xisVgJPpXrzLj4EoRJjJIZrWHArS9iprK+KcefgiyB0XVKGjOmCmW9xhRVMUSyRFnNeFGEdI2q+/HFXclkp9WsAbgTG9wGj08CI64WxRk/OTDcUAvBHXSLQxcVCDMQSWbzv+1e7WVbz+k5w2tJtsbcCYV6WJY7hmAsDA7r1Sz3OgOgoM+KTOJbcjSI5yGIaNE1uuwlAAU/MF+tF5/0sIghVLdVdM2S0bSzHx2Mi+FTxXf8X925NC4BycK8QwfmgVX1LlcFiykEMcL2BndJJ7aQfijKfxLGDwAhByM7aC5U4qwPzNwufNnNuOH4VZaCPlPo2AahqFqoPVFc14ga2m+WEEL0cAz9kdPrOmMu8r1o/rTsXz7f9oswFs+jO6LAqkvC3Ggg5Fg6mwW03CUI6X12h8lyfcz3QHqr3DIl64DbqaQKc9mI87QXACD6vpJqY0EVxz2CEyCI5eMSGX2e7VtI5J4yTRyZhscrvt1nQuivOAaNLlYESwcySgiVbr37Bfd0/u31yEgg2FVaiPCeVOguqAfGov0iR0R9JABJ0bnwk9nMxw+fOh55EbgRhzozrBUA1polN9CLwok5HEEUQBjFMQB7D+j656PW+IrJ8O/bBCo4sGFdGejqiyYCx3mKe9/JtTiBvmI5OFiTisg9LtJFF7gZGDrUbHKs79+hyu5hSaUvh1foFr3r/6vZJCiXgCDwVVFJ7MVmRLsrGltuFCc68yFdACMDAflwR4QM3HPoKgIExt4gz42SuaQb8hBOE2oZmlu+KFlKR3QSssMJxDPWbbjpfLoJrxG8CYT8MKGZSVTCxYFTIb84nkCxCIPLDiby30gXFghaF4c2ReR466Uu2fvoFr3r/fKAEFxvpqMcd9yonIrkuK5LLV7MVCM+/uDJCyIC2J8a0z1iwqyESgMl15Sa33QKgmtPEBnp11mwuXgO70Ud4DHWzfgDYC3zBEOk7HlA6XKyHQzb8HgGoCSQLqsxorIy1Bxie7Wx0rFaf+wr9Xv32C+56/7HbJ5VHtRYT+GJrsehHcya57PyKAQk6+vBkBZPpjPEExlwU59awg3C24W6KBsC6tqHR+MidyVG3i3rdAnAsH2T093XT+zLr197MTA80h3SfsZP2UqpCrPQ46oF317VrpeiKXTJ9MhMLkgGdCacKG/mupV9w1/vnwyGgCDCKWzJe3lqsyzLWZWe6/kc/oKzgKH4jC7oolhdC4jiuzM0WPo+cPQ2AsX1obFCTO5Jzn566PwbReiwnfTWjI4KvDoh1juh+aT+WKSYD3i8Aql2rJk+VsVQly5kkddv2FvHT61icqO7Fr71/IkLNXOi0FQjV0046oBy6wZ922Q95ICqDEaL4XWw3COcf9Mw73DFB9AqE6wZAAS8XuzGQIDKf+oVkqxt00ttAc+YT0PJ9qRFSB8xoye5Xu1ZVeCSgCLbYLVNswoncHxoeLwCzBGjBNki/4BX3z9lXgUCyIIGmhova83cRgO5Te9yLgP3MfmsBS8xs8/U67ePQOqy9umBUruDchqo8sHSd3PMfT5ifo+ack8eFHI6QEcnT5GvdOnVdXof+ptJ+BVPWceiaRHA8Us/nkACo8mzqlqmWrbFDppT5A5UIZm7CPA2Vgm3QfsEd909kKIqB1qJAKCBG8ZstZz3xHOAAiwmpDIdng1maZQAkZzsHZ537YfQrwNyxoQ+HakrnS0h1mUA1C96TdJTmORyhC3oeqdwROi+GDhkFI6bYNrcNDEDeAkXwQizPRpmnIs3OdqZPSaRFUcbchHlgie6agq2kX7Dd/+d8lUJVXuUzk8ERmS+2vfd4uvN2VOV5rSwb0y3JhgIh9wJeN3YMQCIgR78Q+nDEVYBYZUrUpbXFnM7COSdf7N4IPvtDnT2BY/h8Chh10MXQeYGS+7GGjaQiABpuNIFiECnzdWJMIUHcazLptC7YivsF8/7FgLFMqpiQL5TuNbKfA/DC46rqqAbAwIKWK+timRUBEiNGsOQsyQm+Gpjd4n046hbT84KPuYjOmHHyp92gcgDS2OoIuVIeh/xyUkaVwyEWdLrewHE3uBUDcKIwnq40HpDXL+n3CzbaKdguel5VnFJl2awaghLQBTzteZ0cjLq2A2n0M6EPh2pC57Wg41poLzZsAZNso0Hw6eVR/J8bF9YjWGmVCpGKwQLBRCcrbiSxNLgVAxCF8XSl8YDHHFPW7xeFBRwv/rGqOKUBkODzqgdWPYAM53vTASMQu4Bx9J+69OHIF+N71F1O1gUB+AsBfFqKC+4Wi4BWX+CYgOTAU36wdMVNVKka3MoBWBhPxyiuko3xkSX9fvGMkqsDlzzHC1N6SQ4DoINOe7KelWWTheziObeKCdARApD1AdVnRH048gKUAmAEYi6Oh4DJV4VoGDWqjq4XLbO5o1jBoimEPhPJmwu9FvnTLgdgYTwd2wyXbMyRKen3i2eXXB245FlVYUpVxUpGiLtmGBlrTEhVUwV8dEkVKAq3MHJ1uzRbRx+OOgDWFX6MsXJU/36lJoEoA2AKvw8+uwTEDIBbStdOs8ddDsDCeDom7ZdszBIs6fcL9ror2C75US9IxJJsEsHdGFBil4yYuUwknofJgF4XcEUfjrz+X7fKo4EJJ//PkMORO6FrVjQMeL5kJhZMMXzLwNZCt1nzDFgYT8cQwpLt4hDON0i/X7ys5OrAJVe0S/ISgFY7j9ZvnQ7I3+lyqpYaL98CWp/N+nDkZdhi6bW8An1kP3fRTLKVWlwF6RZCH2L4zDDR0k1IqeTNb2OQSYNbOQMWxtMxeqtkY6I+ny9VEz6btfb7xc+XXB249AoXv85+tIBVgJJ6n4lf6oV+mfjdDJNMH0wAVFX90GMk1f5TxlS3Fggh92DyN0IORy5665KIfCktsl+K3VsGtpVOWOMiuDCerlSnjQ2rB+n3C+pIBdulz8wqonrNPLKgwKaC5B3s53qhXVq6oDNg6sOhqvqhEr3V2VNLBjmnSSNdrOLJ1zkAu6VPRjFcFz4fXDJ8i45hG94Gt3IGjOFYA8TTlQZ/qGH1oP1+8ZtlT1MAtHK8mQg25zOZUSCLIliWcbw8wfW5Ln04ssqnHX04euiCk6/3de66MPpuAQVZAEFkw2MKFw6a1wEL4+lSBvmAOMhD8vkOkFX77feLNw14YT/ssmc4A6oOdHBEkwXlgjH2k4Nal6wB4fIuX9LzZjAmorNeHMo5Tc0OewHwDTUh9HXxfGJsYkAbAAAgAElEQVS/uvCpoAcew6zBBrdyBlQwwoDxdLZWXLDFkHyF8xGE/fb7xR8XXByAAVC1oB18HQYIT+8uGfP75SCUs1o64he8v4j6cIQ+IqkPhxrBCHjdjBH6AblQkAeY1ondukSiELmsUPpjbyp7XuvDgAXxdNZVvWCLIfmKg6Bbhrjup98v3lVwcQLw8gqA5v9zC9jErutltg8gMxDWWMBaMVkmANWFyEV6R0uH2I1IzW7ypbkQOTP5f2ch9KsFkwp0kQlDAOmxzHpscGuGAQvi6VD4RgmAg/b7xZVlT5MATNXwqQc6KGwf2U2uGV2uzg3D4ua7fDnPwZcKgIdq9GaIBPZb0YdD7hgyIFWMXiH0eQ5vXS5HcMkc++9lz2t9GLAgns7KxxZsCkgdtN8vWD+vYDMAUpcja7lOR9eLVcIP4tcuob/3AOHCdW02VTX62ApB4Mv1v24gnPy9HiH03fJ366KYHYTHsgBBg1s5AxbG0+HLZaOp65i+ln6/YM5EwdYBwGj1cmUkE7+8THLNdAHhwrUOXtcrO/pwhF4cct2oN68BMDCfmsJM/n6PEPoYPp8bH3kCkbtjji2tJJA962YAWBBPZ0WBCrbYsFoOf9pDAiENk179fkuvf9nTXewKcBSjsn7ldonWbgQpx+26otaLIwAlfi2QQSJY3Yjy5i9dmsFM/oEDMM/Z7Uf0RiYUA7J+ToNbOQC3e0WBBm9qLad6HICG1ZK1XB5PoxnuOOIcxSXe/Of8xHV/P+FpwN47gKUpYHmuSve0pKZgCKSq5wqniWE1WZz/xouBm74KTMwBI17lVBXwtWSs+8/vL45Ff3vhpcAnvwos8d48DZX3M2hx9XIAnu0IIO0chu35AOgLL0yuG/jOmwbg028G/mNz1YWdETbm4I5BrFlov+EtD2wIo7l+Atg8D2xY7iw3V5diEqO54mnj6XdMAYcU+6gon7A3NSO2qFjlyZYDkAX6uD5Iam44YaUfVNDNxaJcLIPXcGGpfi6PnZdVD1wPspQBX/wl4OaNwN6Jqg+xwrxslcVFuYJblehkcYYZGPS3L20BxueBcS8nwg5H5kZkx6TQSbXFZcCQKadx5Cz5mPurAFxrRaa17pAR2PFC+ElSHKQ/0QjQcgCyGyM9v3SnsDBRJgL6msWCf6IfWeUJac8UFlpY8500DcCfvgb43hiwZwyYVhd2D/VSrKGAmIDnBkiafEcN9cprHgKMzgNjS1V7rRjRlceyrqif6KAkMgXIM+6tAnDl+zSL36O9+U8p9jGHQo285/2XA/AnXeNnKAorDXH/AILwbSvLEz6Ql2+cAf/3XcCdw8DkKHBwpOpFbE2wadzIdyh3jjNQirYWEwYq+/zJwMh8pf+xKNSwM6DZMmzNRRbM2K+2Ii6TlFrAWfd5V3i/F7IgT2LBF5LbIdkqxLPWvtzlAGQ3RpU3Y7AiixMxLOUB2t7pKQ8M0qCTnp8HkojJgNqaMEJesQv4AR3Iw8DB4QqAs+6SWRiqgJgY0HVDAdBA4Ba4xN7ndlSFAAjAYX4IPO5dBDMAdS2i+Jx7XTf1eEdTDfgAQnR34p/wQkRmjNAoByDT/ugFphXAmjAEn8qaPQAgZCs0lSckCNmVigEbFMsPBBE3DcBX7gLuawH7hoAD7EM8DMw48AhATrjtQwiXoqkTEwWd7LOneXNCbz6Tiq/TInb2M8ZzIFrTQbGiy92oGz7pXl/7jvdAJnb2470IbB3T77Sai+hyAP5voTqW6sKwFAc/TAdc5+3dvcsTrvPVYSK4SQb8xV3+6IaAqSHg0FDVh3iOIFTIFxtit9orL5Z/LD1Q4s+B8OnHVuXwhhdd5DoLGsgCCJ04q66X/Ju/vSaeAxDPvbdtmdtKDV90gVEPIl/xySkviOhmAEjrlzSkwj40SlQZYZ39I+8JBMx8mZryhOsKwqYB+KpdVSDFvhYwPVR9BD7uyX4SwRS59nNI+bRck/DzJ05v12M0nY8fAk8iWL5BB5qASPGRCi8EVjzv3mqpkC9ACrrwhKukB67GhpqRRowQMqCiYbj8oOoHeUWpdYIBAUj8c8WjrjyhNIJ1unzjDPjqXdUjJAAP8TMEzLYq9uOHICQALe/EwWe+QgddAqCzzD8+vgIgg0qp+5nYjaDzCgjmnCYone0klqP4JSgvvK+6LoFPoFMlkPGh+0rPWta4RHTNJJQz4M8EAGoNTPVU8opS64CC9zoAWTFChcq7lCdch6s3L4J/2QFIEBKA1P9mHIBmhPh3Ai354RyAAmWsR/PRs6vOR8Z8FMPS97yxtIlYgVB/I7jC0rIKSfLXF1EEB+BFFjQ3jCLA49OWsRTTEPzvzQEwry7VrZ5KwzAQAPssT9jw1dcHgCrORQCS/bgn+1HsCYQSveaHkzvGv1scgU/6R55Y1YIxhvOm1EZekQWl8wVDxJgwc88QiJc6AKX/meHDawX9z16M/Em7bO8Q08GBP/jEkAEVjMBoAFWXUjRA3KtNwOBXW3EkAZhrALktpC6lKtTV4OU7RHB+3kHWgv/zrnYZl2kCkF4uF8MGQGc+MqEYUCA0n1tkwxbw4ScHAHr71Q7W4++c8czwcBAmHVB/c7Bcek9b3FuwbdD/kjGWgzJjQ3thGmVA3jhfOyU+RxB6FamOFp8NrhsTgLy8Cpzm5QlVptAU+6CiNgXCaIQ0BcDYV8b0P4pi30vfIxD5+w72C9aliegW8MHzqrmh/meuFhYi0pKbs6D9fsh/n1XFMrYMbPgUByCZz6J+uEknDA9AornWFRb01WZEsACoHhOqyC7wdetT0QAK2KqOb5MCUvPyhLE0oQxzqaYNXL5xBvyVXe12vByLADjXAvgxBvSPGFGMIjCmJbEW8HfntxtQmxT0cmxp9UPAdKAZ1upA6EB7qgDo6oCUxXRtPVSpAwJpnUhuxAqWCCYK1MBExZljY5S8SYr+pxAFAuBayhNG26jw8usCQLX0SAAkwwcAEngyQizaXoziIli+Oe7/9kJvNk1LmBMe9ECO3XRB7aPeF0EYHNVPdT8gj016YBcWtBfBVYJuz7mF7VgGY/pO8f5WdQ1/7U67nIKNS7j0wIbDPFZsyNHHY7od/xdlEHj8CcC3TgCWHgGAPSxiSdt4312u/8SPAl8/Dlh4pDeZW2PD4J1c9+uyDaIDkgEJQKnTfG/N8nUAmu5HUnMW5ARbPfEuIHy/ACjRK7FL5pOR4RaxgTHofKl8r/S1ZWBnAGDKefbn3AFIPRPXB7sFiVQimKVgGdl5ooNwLQ1/1U+DQGSXQ9r5Evy1q9rZbP1lGQDZsPpzI8APHgXgod7qUx11YtBbFzC+/C+BL7SAWwhgdoLkONSLqy5oLogYft3ZI1F7EAC+phsAnekokhP4HIzml/PvthQWmPB9LJ7jxkcSr14jWj4/0wFlgJD5eoDw6fe4DzAYPHokWhHJZ3TFSkn4h7YOSOBwEtiMTv1aY0uktFYTmI2/43EMQmCuAJmUE0gmVD8EFdPpdnxhVhqzDr8F4NMtYM9Jfg98EVTeNu9Q2OFZBX7vr9vtgm/lcezczZ61ZNN8DCvilYCdPXqNDQpAlfGTKm0M6AA0PTAyoMSx64cRfPQHXsniOTI+fEWDFGp+Qb9BeySRBV2kpl0QxxGAlHDmkI56X6z+EP7UDYSdRgh/IouwIZ36lHabBE0GJ0r10Rgb/xA/tt/j/6aMAf+7R4CxzuBXWRGULwBfIrY6UNfpvLae7n0I+LO/reoLMqiVMbW38oUhkNkQIzZO7tIweGePcmWlAFTjAYHPVGwXxWoLYblEDkLuTT8MDPhXLJ4jALpaJB+ggU6xfgJknT7IKXIQXh4Y0FZCog+wxiUTwSkXUbSMV1rB/A31OXWuFpPUda/mRHKi1e6U+hA7Zq7l+A+UAfDtHg/LrptkQpZ727cRWOL9542Pa3rOvuOqagUltgtmJM08j4/PILbIDKz6w5PAHsbraTnMGdZWIwIzxIfeK0rn578J3LAVuH8CODRahV/FFQ/1IumIvXP1QudNfyNT8oVqcHviPcBd48A0g2RDuoDqHdb2SalZAdG9dnfDkAE0gXnH5ijWCDbKCq5/MRiV0QD8HgHQ63jG0hdsLGxA3x9Bw1Asli7hO3BwApgng/Gjvq01IHrXJ7q3Cz7E++YziF2rs1ZLZ+8H9jJsSoECWXj6igmR87aLgfbGq4GvbgLu2gjsHwdmCEIPSI1h+SkCRjpfUC3iNWcpoRrcnrYbuGsUOMBo7QBCxSTG/igxVcBIVGPWM1h1JYQPnyKNExGZMDIJ9b66eEBGxPDY1Y5nv+GCjfGAxD+DDpiawphABWZPjwNzNLAEIH4XCH0M7/5c93bBfI8Yk2cgVAdvdT10ifDkBWC/r9lGH51NhIsnsWHOfPmEUKT94WeAG8eAO8aAfWPAwVEHISNQlKQUglJjJExqC+H6Nq93kOpUg9szbwLuHa66QzFWkaFieXxi6hgVHOMCYGRuJ+5V4jYJIDKI9KlsAvFDq8QDrnb8NWVPh9EwdFkQ79TlSMIsN0Mi5s9MoOGno4U6f3YAvefL7Y7rvdoFLxOANSA8f7xSgWmd0kCQbmZ6mTLEnJ0UqWLhUkxlrBn6n3wWuGkYuGukCsufGq2iojnRFpafsU7MDxErJuZhYCsJosHtWTcBe1oeq+hxigJgXBrMmTBPnJKLrr+VED54ibHYvZos8sO+DNcrHrDX8YVVyglAKud0LtMjFPtNMz6QLDY7VomLJd671AEH4Xu+3g7nWq28ISvX58/hguOBg8vtFQvV/hEzxfqOevuTfpjri8vAWz8L3NYCfjBc6ZYHmBcitnFd06pxyb8W4gPlgonBqffTtdTg9pybqiVNBssyUsdUD7eGO9amnf3sXtxQipl7Wg/sD4A8AwHIyZMYky50Tp/xgN2OL8y051qw2hXzwRCEdT2nmck1RxHG+w5jeO9NFQBpR6ldMIMXlFWgVndqF2dVFsJzuOgRwMElB6DcI6rznemD0RnbwQiSRS3g7Z+tVIl7PC9kahiYZm6IizuLigliT/VoUog+p8P9l3wJ7qGEanB77k3VczroUToWLCsABud4ypaLCUoxf9i/9w9ADiICULrQRWuIB6w7nuZrwaZwLBGwClSqSyz3AhHbaRGEFGOmC44D72UVgjW2C2Z4lIF4ArjodODQcqUGqAxfcpG4mJVuVqcL5tbs2z/veV0tYK/nhTAqesYNHdO5PCJZos+WuzxHJIViuXFyJxupNLg976ZK2lizUKodilGUgzyGhokF8yw5Mf+qRkjdjfuDtwkkm7DTkNaBaQ2ox1q3eMD8+B6O3H6em8Kx1Ccx9ptWl9iYIUAAWrI3I3nHgPdOtsO5eOuxXXBdj0V1vOL/so3Cxef60tlSpYwveKf0pAu6ohfdJ8k4CUqgvr5jV6VGTBKALeCAh+VbZLTnh5gu6D44A6H8cVlkNK95O1WkBrfn31R5HSy+JCwPplAxRegE/2T+AloGncNmbQyogUQx/KwB4gHj8YWNTwRAOW0FIIIndoqNkTAxz/bd09XDGLBdMM6/pLKi5whAX60gCK2ujxzEAqGL2pQ1Jis5AJEAFHvTujYAKjRf+SEugm1d2COQLU/DAwQ44caEw8AtZzSIPgAvuKkdrWMM6M7xCMBoiBn4YpCE2NCfxWAA5MEuwvCCEICwlnhAHV+YORfDsWJGgPpMKwg1b9QpFnzHbD2BK2JGul9s8KkYW17vLALQRTCBpzXZpS4gtCXXMAkduuAy8E7PijPWprXJ5CR38ygw1fJDohh2BlRAgq2OeN7uTWc1D0AFNtmL54ESBsCaJcLkDajxj5ZXRiCIGA0waDwgjy8sk5+HY+X9ppUbJSCp6TnFCMXwny1WAFQ8rUAc2wUrRL6mXTAefWnFfnz3FpbagQKLAqAzoZjAKkkpXkNO5GCEvOMLFXOnnC4xIKOjnQGNdWSM+GqHQGd7JSsxUf+JzQLwhTdV4je1nQvr1MkPGtlf9yP2Dy+gAqZ6rQytfvdHSDxgLwBF8AmAYjHWluEDiKGMiqOVvtejXTBOuRSYJwDJAARgZAGWL9Nk+IM3SzgTydE4eec1nZHbtDaNAf1Dpd/SMx2END6kD0oXtFhBXmcY+OY6AFChnKnzl7NfdMR3qCAae2B+VVMYXASvDs3/X/zHJZcB84vuiqABEo0QPnhnwqQLyRURmZBPytnwHde0M1vN2lR6picoKULaxHDIEdHkW2iWg4/7b5zb7DSQAVd0/griV2JYojfpwRGEYsGBrOBmx/OgP5sAKANkcbFzNWTRnX/GSGImMYH/LYlk+gGvdT+bW+SWH+Ig1GqL5QeTtR2EYj5LVHfjw/ZDwL8yJ6TB7UU3VVoTjTYxYDK+Ivv7dzNAZIxpZSiU8jjKgIWTcykZkBawDBBnQdMr5QeTKI5iWCB09AmEb7+ucnOQ/aTPWn6wuzyS4u+R0Ob6CUGqJpIDA97AdqINbgRgBJ69CG4Jp6q/ckjXqB/RKla4WpkO2ODgHoynigA0JiLwaNiEt95YQKJ4FRC+7brKzRH9jZbN6iJYuSHm9I5iOAOhHNJfZkh+gxsBKPbLu3+JgaWDdojhMO5kkDWSlNTg4B6MpyIAjf3IggJgMD4MCARjFMU9QCgAykhSKnUCYHB9JB0wy5aTRUxmup4h+Q1uAmDs+hpXgFLnB6ULONOn5xACNJqxghsc3IPxVBGAiQG9aLeilWUJW1FvVXEN0TKp1C6At19TMSCBpz1dHtT/JH7N9yaxp6QkF73KBxYIr10nAMproB44qQGTj6sjUrtOFPtLeFQHLES9AdDFrq1E6M13MaxVCTNAXNFThIylLcor40zxtgDAPKuVwDMrOKw+SBTbtR2MND7sZwC7Qvm4wqHa4T/uIrhb+7n0EgbQdTijoyg+agWXT8llDsAFWr/B8qP1K7bT0pvtVwHhW6+t2C/m8svvZlawi2CKe37nhFtapkDnILRqBQA+v04AjMyn79EIkXO/DnzyCBwVweX4wxs9B4rRZgyPVFqykgDd+5JSpBU5r0vHyHz+jsc3ub0KABsZMCyQgeExKyFPVIz3lmcM6OfPAGCADYPE67Jfs6h7G0o+xvi7oyK4cLZfOgpsXwC2Lq9MwuuVERonKn4nSJrcXnQKcM7dwMMXgYcsVxkSebJgzOWPqdB1ad2f3gpsnwK2LXWeR9m3danUIV1lBSCPArBwtp+7DThuBti6UDWDmWA/DvXk8LRptfPtNUlihYZTOPCi04GH3wFsnwGOW6iAs5n3GeJJ+KLoE+9VDClQ8R6vOQHYegDYwuY3S6H/iJ8jb11ck0q9Qhoc9QMWgPBZJwFbpoFN88DGRWBiqQIgWyJY3lPozaGJ1KTEPh36zpTkJrcXPRE44S7g+Cng2DlgyyKwaclfFoIwvCwx9Zn3Q1DmIPx/2/sSaMuusszvjfXq1ZRUElJkKsBEGQyYhJCBSkUqAW1tsBdpuxEVaBzowXZqe1g90G2LotjQdmMjKqtBxQERdAWUAkUlZNBGkQRNyIAEMAkxpFKpqjfUG3t9//m/c/+737njPq9uVeqcte66b7jnnn32/s6///3v//++Tz0dmD0KzC4DM6vAFpd/0L3Gh6yTDgnvLwKzAWDGiH/ThcC2OWDrErB1pRgQisIQhAa+AED+HEEY6uNLyrRnZLSl6tSbrgLOeBQ44yiw8ziwfaV4UGbdegmA5QMTLFlqsfn7XecDW+eAmePAltXiXnkuZSBkRcm4UGXtU2uo3xsAZgz6y54JzMwDWzkgBOAqMMVBCSAUObh8QuN/CiTgcWAuyWhL1amvvBbY+VgxbW477paa7gIBqCnUrbUBiQuhAKDUot13IbBlDtiyBEyvtO5VDxvvVfxW/JkWNFrCeK8NAGsY7BsvKQC4hQCkJNaKy2LRIsg6SJ3IQSe1onKKC2CsOYMeN+0Dtj0ObDsGbFsEZmWp5S74g2Ir2uA22BScAJGA+dJFwPQ8ML0ETAUAkgDTPq9zdK/+sMWpPF19NxYwA4g3PtsHxAE4SQC6FdSgmGWRRIJLZJll8EGKjHiX1jwaN10HzD4BbD0GzC4WrsKMW2pNobZoCu6CLCDfCTqzgg6sr+wFphaAKQfgZHKvpRSYg7HN5XCL2AbAZwPrZGaj6ippXhgn0kqmU1woxnHedg5AATuWHig2FE1uVRwoxoX+Wcbg89S3AqCKPONcCi8oPtVP+9++G3j+oSK2xRBFDElUxbTS+3nvc4FpDsjxllXQoJg8FgdCQoGJJTTicLcQ6vPL6wbg9cDM4cJv27oAzFA5ky9/UOSvmg8oP86n0dICBn25JwjARWDSAUgBHN6vfdbv10AbARh8X91vDM2ss+NvAECKPVLCsHoyUgRqrlbnRwB933OBc+4DXrIC0IEmiLnE75di8HsyAcjzWUVGUi6uICMpVwwJVMXdeOk3XAxc+Hng+vV2esAYw+sWoP31r3eLcLwQBeQUrEHh4Jo2h4vDmJPuAyMLGAeEn7uqbgB+I7DlSWBGCwe31Gb9aL20kGDb/EGRxY6WTz8f2wtM8l4pgL1SgM8esHCvsuylME4nn9cfQLtldg6TZ0kUKorAfij23vAPCmqp3fcCl60XFINid1PlZrf41/dnApB6wSQjutUfIDJR8CGIQOwWEH7DywpKrWc8CFzqRLHkVYrB2jS2FQH5vkuBycXCAlIUUAAkCM2iRBA6+ARCe7DjYmQduLYTleiQ/XTTS4DpI+6nLhZW2nzVCEBaMLd+soIGqjD1ampdugiYWCpeBKA9bBJC9ActAk8LES26SqsftInLZ44dQif4Igdhym5WLrPDyuYH/7HTCNwDnPko8LXrBccjQaioe6BiKad3+QY/MGTH6rS3OBvCnQDuAIyqhiDkQ9RX+29yE3on8IwjxQPI8zkTiApGU3oVkD/4fGDieAuAdMw5MFQjEgg1DYsUku+a3uI0TGBfV7PotwHwaOEmbHEATvuDIutni6UAQoFRIFRYhfe/dhEw7tbe9Of0Si1g8HkrwRcevDajz07gIJ7n05rYyWIpb4ya/7vv8PRdFpj/LXDmkQLAnA4jCCOlTBRN/rFMAJKgkkVHpGUjySSBSFeg7/azqk8EgbSEq8UDRACLKDXSyaQ7Br//DcA4LSCtwnKhTEkQcmAIQhtM+Uaajl0uS9NatITXWzpzfcdNB4DpY+6nBgDaCtanYLN6fCj4u1ay0QIqtML/EYC61wSA9tAJeP6eWsAoDysFpg1eB0HIQRCIIkVeCqQf/05P3WCB+UPA+CPAzvmCaFWDKEuYcl1yMN+Y2dckqGTeHPEvvWDSNhOAfbefX0A6rS8CUw8X9066bFIfdqMHJID++DJgLACQumyc3gyAEYRRKFCLD1eu5ODLF6QvXedx0w3A1BwwxdAJLTXjd8seQnGrZ9bPFxLyA7WIKON63tYtCQBN/sv9QPm6BkLp0vl9t/m6ietR6fbyBA4gnXtORwRRpNnTtPpW6gWLH83lKqcOFTEnDiKtoHwy8RNFhrefyeztbnrBfbWfgttsP+kIyO32ELD1cHHvInrlvWs6TsnB7qAUlg/suFtAWkE55zYQ0QpqcALoNCXTEt7A3KoaDwGQfqoAOEUBa7fUbKctltwCajVbxvSiyvoasM0BaBKwwdKb9fN7NfcqBWGiSWykWXER0umeacUEonQgCKRfIgDFjya5yq8Wfsfs8dYgiuMxgpAg/vnMzu6mF0z6Zj5APdvPQec0TEosnvQosGOhaLuIYvnwEYSithE52F1XFAA0p5yigD4otCqygFKnpHUpLYP0OcKURYv6Mj4MNR433QhM0gL6QongawOg+6rl9CswKoSkEIxPyTsuAPigCYBmAXVfYcVf+n0SRYw6dP1YwNgHsgSajiJP429RrpWOM6cxDiJB6NINM4w7LbUGMQUwB/M9mZ3dSy+YVG0EoBiDBST5ddZ+PkCsAiIlQZDa3LVatJ0WXG2PbL98AB+4omB3oP/HgTUhmGgBfRqWf2TTrUSjExDSP/qWzQDgfAFAWyzR8rkFtDAKX75jo6nUguZxZ8NByHbvvqBQ36T1swcsBaBAGGRg40Ir+rt9WUDhQ5ZAU7Es2e9LLzglqHRxNkbeuW+oQRRls5jaMjnK0a9ecNf2R4LAwO829kQB3LTtEYQPUwzQAWgW0AGo8AQH0ljp/V17pm0KRcEifGuNOnocO1rACQbKPXhs8TtNwVr5uh+n6Zf3wDgu29g2FdMtOc8B6PdpFj08ZFrplw+ZA5FTvAQQ0/BT36FPDkRqBT9Jag7xYlQItY0f88j78sZzCcKPZlrAQfSCK9uvB4h577SCotUiEJ8opq8IQFl/PUBPEoBLxbRE62LSqG4dFB8r5bHcOtiOQSqT5T7RKzYDgJx+BUCCTxZQCwhaQc9oKcEnEBKknj5FsJ1LAPo9xoWWPWDy+6IIoqbeaO0VA+zHB0zxIQDKkn1GgtXiRxMIAx0Vn0Db+lkuFjLRCt5WEwD71Qvu2H5OfekD5FaciQay/GIbFgBXriwAyGmJADR1ck3DwTE3TQ4B0LetzBJErTYAr2BBSI3HTS8tLKBZPo/fWQDZp197Z3scjGb5BDp/L3+njMweB6B83Gj9wj3atOsPWin9WgXCFlVO/3ctf4iD8XkBkH5USlAZlNPZAQqARr5vxu1yjmH0givbX0UQKI63o0Wun/xHuR8E4VnPK5JQLd4VNttTBvK2uoiKOUf/f+GjwMNBh0NMV6J0c0NpcRv7mrYv3kh8/uHxYp+bVpwLp3R7sts2YzouSq3KGa+q7+x7Co4nazAerRKsVlV1QitF59dyyFZaYY0HMu9mWL3gtvZXMbymBIFMZ1ov2h0B+LTLisxgW+Eq5uU92iZ72ud9vvR+4JFp4NjkRh2ONi0OB1/UBCkvEYRhfuNs4OmhhiPKnFQlx6aAjMnSXJUAACAASURBVPjmz1w41nnwO4cCIBvBwZgTAOUHRq3gyDExD4zRGVYEnpm5LqmQc0M5esFt7acFl0SlHiBxuTkYxxdaihUC4QVXFu5FCUD5QtJl85sjGA0ziQxqeu/fem+hw0F2fLLQGxFlYMRvo7v1WmIVtpt1DFkXvOR7LwJ2HSkyoZmEypoVVe8p7b6qEMnidGG/Vl/L2aPOIwuA1pAIQE3DAmFa4j9f7CPaFpCHKujr5xzZesGdHqAqKz5X+FLRAl58le+jui+kTBALMcgZ73CDBkpN2/7+bfcWOhwUyCEAjQTcAVhKdjkPc2RajewKyu/n1//qJcA2uhBMRGXQOcn9U6JIOjXHQqSYOsVoQp1HNgAvz8yny80H5PVz9H6RqVd849WtXQ/zA0Ow2ayGLJ474L0G79vvbulwkJi8BGCg4S01SKqofoNvSIC+5zkhFUupV8rUTpJN06KpaBkFQm5M1HlkA3AyM5/u9Zl38zrk6f0iU6/4hmscgK5ISUtCTowyDqb7UxwsqFJW3fo/vbuIBJEZ1YRgyHwQKNi0KEl1OKTCZJdxtPDn//v8ooaDaVgqFyiTD2IKfcjZS4Fo+7g+HXOPv84jG4DIzKfLzQf8KVfI/FNKrQ6h94tfz+vOA9cGAAbrpylY2SDlVTTt+uCnV3/V3a7DQQAysJAwobZJgUXi78Qayhd812WeiOAZzEyUiAkHMeu5BF5FwZQAWLPwknkLQy9CrPMy8+lIHZFzvN3T+YbV+8X7c64OHHix74V6zIxB+RJ0wQ+UU992tYoFy3fcXcTDxQkoPsCUhFIczKVCegSg5B8A/PILN9ZwxBSxtiKiUAOi7JW0dLTustF8AGbm0/1o3vjjnSGdj+lYlGwdRO8XN+c1wABIoHk6k61yuSCJITq3jDY9Vx0BqK++uwAfX6JkI/hME0SC1EGguiQ+isqcQRLrF6/0jO2w+6FMnZhyZYsQ1W50qOHgPX1NXndtODsfgMwHzMin+0+ZN0S9YOllMzWfLwKQSS396P3iY3kNOLDPM1y065H4gOW3p4uTDkB8zWdb7FgbdDhEgJkCUDRvogTmd/vPv3BVAUBuvylNzAAYi4hisVQnEHoIqWblrxqm4Mx8ujfljT+YjsWBYgIOc0oJPsq1slCpH71fKybJOEoAuuVTRSCnYlmU6P/Z4iSJEcbLv+Yu9/1EAh7JKEXDKxq4ChUiKymRbwjgHdcUWTARgLYXHSr2LOU+BV7MVwzxwOfkOWybYAGZD5iRT0edjpxD6VhcOQ6j94tP51wdOHBdMeXa9OqWRcmWXA1XLUIUH6zyCwlAs3z+YBkfs1u+VIejJEF3ckrjI9T0y/aMA2+/tgAg08VURKT8vbKMUgAMIGzzAcOi5HknHQAz8+l+MW/829KxhtH7tTz+jIMAJPCYMULAWd6fvi+EY9ouoZBM/Kx/4LUBgFLgNC5o16FrE8JJVJgkiFhaQQBv3+dVbMrWVsC8UxFRkjjaVsW2DtRdOJ/vAyohVYK7A+bTvTdj8HlqTMcaRu/XxHkzjgNkIOWuDr8jnYYDKDutgpUhra0uAlAyCCUAK8BXcjBXgLCk/h0D/hcByDxFAdAzoFUqUBYRJTUcMWdPP7ONL6i5bLQeALJRQ+bT/W7G4AuAOXq/lsGdcRgAY+glLkYclJVTsa6ptCX3uQjAKINQstFrAZKIwWxQIhIJuovB/Nx+r2LzFCwlj8Y0evl/MYk0kieVtcvrwGUnHQCVjjVkPl3mItQsIPuElx9G79dOzDgMgGkAWlNyBJn8xKprBRC+zgEo4LWRgcdVcOCjjlNvmx84DrzNAahaFZWLygKWxUNibIhTcPD9BMLLa65bzreAMSGVoXvJ/Cgh1WUfO+XTZS5CDYDs9GH1fnOrIDcAkABTTDCCLYK0Cwi/586WcKJUiEpC8CCBYDsiiSplqUIUmOjf+o2tIiKVUJbgU5uSWl4DWwX4+PcXnrQATBNS+8yny1yEopdcay+930y5YhgAg+9n2OoUeI5TdQer+32fdhmGoOBZanBo+g1yEKU4dYgFSvqB//vZBIBt9RshkTbW8ZZZ2hUgvDL3iU3uux4LSBM0ZD7dPRnTH08VAIfV+2XAOucQAMuVcKfFSD/+IAABsEoGwYAoHZIKEEYxRIHwLS8pUuhjFVs6/ZZhIVWyxVKBBIRXnbQATBNS+8ynI4tBzkEACv+chlUVIKE/5cRGsWmlKfIzudc3APLQSlg3E2OCyVRc1kpU3DgBmKoQsWtlBcswjPu+nfTYtBL+GQdgOf16GCZW6pXlBCqWSgqJypoOAFfXXDifbwFJLvi5HAjlnUsiIe6AjOp4iQNQHRlT2PlgJCUbbc2s+v/hFwFb/q7gm6HlYpBbmTV2sscQyy/qFBj2v0/cAdz/HGD7NDA1AUyOOU+1CwWOewNjKj6/O03F1/WuugW4/XJgfBoYmwDGdH7IxB5kLPIB+I8AfNwZgga5ck2fJbEm8V9zNWPfrasbgMuPAcuseJ8Exsb9FdBhA+7gaQNKB6TfcgCYug+YJT+g89aoBDMmIMScP12uTKj13uDv8zsKig/uJ1uQOsnojm3qB5P5ACRBH3OhPuzzRN9DV88HqQLEWPJnvTy5nm/t/1s4BcuSpRZtGAu4fi+wtBVYEyccrYwn6hF8/FkJp9bKxAKVFsn/d8urgbHPA9NPOEOWl4+2cfoFHhfVrJTZPKHSj5daOtup6JyCpPx8rHWRVQ7WOlrYCMx8AHIzlxkALPD9c0VB+x/A3E/+E2fUYHXdF7KTGwdvTd0AHP9r4PgWYG0KWBdfsBdsMPfPrKKsoL9XAVLAvO2fFylCE4cKliyrDVZNcGS1CqEYhWFiAZV+XntaURdTLmpCEbpchTYLqi6NrkMCzLzt5Xc4HwyJmmkJ+Z73jQOh4NWeDUZiK1K08f0EXt7CMHVawIk7gaVpYJUA9LI1Ao8bzKX1cytoFtFfpdCIWz7rgzHgth8u0oPGDwETc8CEMySUzFaikgtlpW1Ta8JqNba7lVljSRgW+Q6ZP/57WQvj6fydBjXfAjKbgEvMLwWCvhNoipgNpnQshlS4IGFWzIk6ylWwAz93ETLxGWB5ClidLABoIOS7pmGfG+33YAG5mND0G8F4678vkiPJczNOAC4UyQm2N8w94kirFlfIAl7i402d6dbPWWAtrsjOFiuCvAJZOQE0pHTFsckHYDeCvhNgipQNxoAz8/8IPr5nbvH2jd+6AThJAE4AqwTdZKEBLDoDgU4+YVkPHIBoPwareOt/BkDexsMFAFnbzNJYm0IDnVwbt4uyur1kwL7Tp+iZM/08WT9Rc7DHUmuYTr/x+6o4ovvu9fjBbgR9JyA+omwwxvZI5ULg6ZW7y9FPf9QNwKm/CgCcKABovh8ByVy/UCtJq2f+X1yYJPGU27lIZLbuEWDsWBHesZeDz4iURLUWa1TE47LqK12fZmd3OXidFctqm92KatVs1jAEsNv6sdymaa2g8+xUL4I+Pn2beCgbLGWHI/h8G3oTr45iK86POlbBU9yKI/AcfLR+ouQwH9BfmmbLlTHboOnZ/T9+5vaf8FUaAThXsFOQ45mUcgZCWTAxe0UQ+urYMO1/37GtxQmoLCBtRSp30LrDp2SFdzYMgk/R+VNwvwR9mwQDsaspGSfJgYDYNTbp8psCQFJxEIBkQjDrxt8dXCUIY+COH5MVFPi8SOn2n/QYLZ9Gp0cxANIP5IvAkzVzxivRydnKNzBa8fddM84b6AFyAriMF2pajk9kYIeoClXmA3AQgr5NQEHMBqMVFMNaIOayNRL/vhlH3RZwmhbQQUcAasrVVGz4EtjCu/3dfb/ID3PbT7uKAZ/MhcIC0vqRTo4W0IBIEAmEtFwCYqjW03bcmdwBYeoWgetUbrR8snrloiR2drpACf+rD4D9EvTVjIJu7HBV+781X752Czj9lwUZkTEgcPoNPp5Nv4oBRhCG6dd+1DkMz1JIhR1BAHJ7zwqO3fIRRM5tmDK5CoQKsSgOeBYBKFZULTqcB9r6Ni5KYmd3WKDUA0BlhNLM8EbT1QBXBU72aI5ZjUcVOxz7WLkQ8d37vsart/uA6RcPsxNSAtAXHDYNC1AEpf9s01kKwuBwGU7HgVt/1jtD1e60fgQigSe/j5bQp+KYpGB+H62jT7P8/ZypBIC8Dhcx8eY9wF015abhmnoAyJ5WSrKeNgKO9SHxnT/LSasJBim5lRjWBEIVeROInKL1qunybRawLgASdEy74qjaNNzJCgqEEYzBGvK0297mAFSHEIB6ebKDgc8J1ksmV8t29f1en6L5v6cxIK5iK6Xne/5jCTiFcTqVn/r/tWDPWwXnEPTVgIKUHU7ljASawKefIwDpMdRxRB+wFgD+RREDJABpwSzz2c0LfxczVjkVKwaYgtBBezu3SvX08d39P5uO3QKahXMQciourZRAGKZWar/YZ1xXRPe8wQr2AUK7TvbOVTZBXx4MBECRnConUBSFEXT6mf/TK+/qmzAF/0UBOPqBZYF52HrTFCw2LH5G8UCzJEko5nZqmRnPh/uCXmpnVpDTsIPPwKApOaSA2QLDLSHf97iPx0tpISLfz7bl4iFfsUsnj+HZWEeOYDCDnDmCvZkEgedcCjxGseIhBYt3vx049HwMLRh8gA9gh2MoH9ABqKJzxf0McO7XlSAU4HzhYYFq+5D7hwBu/98OQLlIBCKnW39SlXNY+nqeiq2dkQg+gnGPb9/ZpT0lq6MV5D96gLCwgDmCwbdnCvZmCgY/dxy47xxg5SWuUjigYPHFbwA+fyGwfr2rXrMvPB+vp3L3GHCgi9JOHQCkRVPppeUBigXLFymyejYTB4YsgfA20ofRAlYB0FfAlvQqP0/TsX5PLOB5DNu471cmIwiBaRww/F01J+mz2pqChxUMZvpJlmBv3iTocsW4dzewfhkGFix+2febXDAeJO/YEILBB7pU1g8LQFo98QASVGYNQ6DZfEG3fnEqrgLhbf/HV15anbkFNCvohWSl9XPQ2XTM/2s3I4DwPIZwBEDfgitH0Ek6N6x+u/iD7T4g/YdBBYPpWHEaHlqwNw+AQa4Yj54JrJO+aQDB4pt+oCAyYvOPEIQDCgYfeF/9U3AbAMX7ItAlVtAspKZdz5SOlvA2pstxjES3wJ+92NgAGK2gwi78QoVfEhBeQACqNNP1RdoA18kKdgDhxkUI/zKIYDCnqyzB3jwAJnLFOEIW7QEEi1/1Y21ywVglCAcQDD5/Efj7M4CVrZ5AKlkhxeQUaxBI4nvFzxf8IfCVC4HV7cC6ZEX5nen3VX1vAGLZq8ysrvHY+QBwbGfI2E6JpLvdX+ksthpUvQrmX/sVDGZVUJZgb17vJHLFeGQcmCdVb5+Cxd/5xjZ6QzzMLOQBBIOfTV2Ps4HFHQ7CLQUQmUrV0rgKJMsCjsxGAqTn/hzw0EXA4tnAyg5gbTYBorKkUyLnkB9YVhTxu+kT13iccwtwdBewPAus+b2ar9xJAafqfgMQO4dh+J9+BHe5gqZZZzYok1JJUcpaR6bp93P+W/N6p0KuGIemgEWKgPQhWPxdP7NBLhiHKYHUp2DwpZ8rLOD8tmJQVplOLxAqmbRKC6EDYC7/CeCRPcCx3cDSrsISrs04CPm9ArZk55UvKAspYLqPaPdR4/H0g8DRHcDyVr/X6VabLHk2PhjpPVZY7d5xwF6CwS9y/4LbbVyQsEKIufGiKe0p2JvXOx3kinF0GjhOQY+oNRtljji9TQPf/fOV9IZY4Gq4D8Hgy/4W+Oo2YG5bUUy04vUcLCqSJVRWszJbNgxSmMau+q/Ao2cBR88EjtOqbgNWWaTkIFz3YiWrF4nAjtN0nBZrJnU+/8PA3CxwfMYB6LUra3oglL0tps6wlVha5rLiqd9AdDfB4Je6U0s/0BXTDYh80Sr2FOzNA2AXuWIszABL1JaKWq1R+nwGeM17OsoFY5XTVw/B4Cv+Djg0C8xvLYqJCECzgsxmZlq9T8e0XGUyaUizavPtxoFr/zvw2BnA0Z3A8e2FVV3x6c4sqwObckeyhiXAowUSADhD1XhceDMwx37lvU4XxVN2n3rJIocygkr/Vbs7fe+EdBLcfaXXQ3IPWIrpBB6XlnwpR76jYG9e7/SQKzarxM7qJFj8mg8UarMV9IZ4gvNDD8HgKx8HDs8A8zMFAFnPYQPDl0Co2g4fpDZLqKCxT0/7fhJ4fCdwbFvhRiwRgJruCOwUgCpeCvUjZmEFxhfk9W969kW/B8xvKQqnVgg+B6CB0MsI7P70AHgmd2n1NQ0rv7FvALIlVYK73MnQCDLThSGZoDpuP7uCeuX5n8zroB5yxThGnQ0CgyBMxY63Aq/5aBHG6EBviDlOLV0Eg1+0AByZLgbl+HRxnZXJoqqttA4ODovlJZVuSjTQFtq+NwNPbHMAzramdVpVs6wEoPtdNg37wJfvsYiJP9NFqvHY+7vAwjSwxAeNxVO8T6aNVRRRlT6hHrJ0Ovaw0WDJCKng7g86APvNB9wg2JvXO33IFWOBgn8EIf2nRLD4tbe1+AU7yAWbZeskGHwVdd2mgAUCcNKnJgLQrZ/V9/Jnn5JUYmnAE3hCmv3+t8AWQfSzyPK/POOgJgDdsgqA5nfJAvLdLV+bz0kK4RqPZ3wQWJxyAPqDVhZQyQr7gyaXI9axWCFVAGLvRUhV46PgLnUWBs0HbBPszeudPuWKsTRZAJDTo8l8ui/42juL5veQC7ZpsEow+OrZQlqVVuH4FLA8WVyDAOTAmHUQCAWQkOlsQAwDt/9/AE8SgPQpNa07+AhAA6HLXbb5Xr4IaAMfv/eGvP5NzyYA7UGjBWTWjh40v9fSyscHLtaxhJWxFVsNNAXH1khw983+DYPmA5aCvXkdNIBccemfceooAfhAAcA+6A2xLuAGucxrzgKOMexDfV9OwbS2BB/BEoqLSrBoYGgJ3E8qLcIEsP/ngCPuUy7S13L3wb6PU56/m/Xj4Ps0TKCXQA6AXuNeZY3HMz5QANAeND1kwcKXlj6wOZQ+b7R+Pi0PD0DeFAfk590CKg8qncfoFzIRVWVqfFfBhgn25vXOAHLFWCDbvPstBsJZ4LUPt+jdesgFg+qVptWq11bg2gtgfuLiRAAgQeg+oEmsOujsXb5SsAoCIN/3vx04OlNM6Yv0tdx1MKvK7/TFjVmeCD4HQQQhf159eV7/pmc/kwCcKABoeYvR0oept7SEoZQ0Tr1lPuPQFlAtO0nyAcWhpzw/FSjFzGjLx+RGvxzoSeC1hwsA9klvaFN5FAy+9mJgnhaQ0qqagglADo4c9AhCDpJPl5ZommQ8738HcGw6AJBW1VecZv0cePwOY0/wl1lAD/WUCx0mMlDLr8bjmb+Dwp3x4nkDYbD0thIO5aNtfmDi/xGEeRawxhs7Vb/q2huABQJwAlhyy2cC0xoggjAAUCWWAkksOiIY978TmOOqeqqwqAx3WGhHK06n7TDwOcAV/iipPAKjwgrZm2o8nkUA0gKmAHTrp+o9MTrEYvq44o9pZIOtgmu8mafCV72YAKT/RwAy5OPOuVlAAk9Oule6xQRTWUKlWtkU/IvAHAHti5oIwDK841ZPFtCmdr0U8PaC9hVultd4CIC8P2Ztt/m5/qC11TJXlJDGGpfGAmYODgFoCxACkLpuWh3KCgqE8gNVZK4KtxgjJAB/2X1Krao1rfN7CWZf3LSBT4uAEIyWBVpipL7GgwA0AW25GbGENBTRx3rm1M2w39mmrFVwjTd1Kn+VAZALEE5LtIDyMWUBvbLNLGHgd5H/V07BDp7r3uU+Jadgn3ptxekA5MBri0/Wp4wzBjDbCnkMWMqVpE8GJwLQqvfc0pqbkVj5aNk7gbCxgJno30cAjntowtXNaZ1suvSKNhsYTcVKmw9F5xGE+94dfEoP+JYhD/8OC8eIPUsUHokVVKB78XszbzAF4Pvd//PCKVGIpOAr78mn4DZOm8YC1jco+w6EFTDDPJqeCEBZBa5GffVbhmQ8DtZW5TYOvPhXip0GTuu22lTMLSw+aAVl9QhEWjurI/aQiLJkTMLsX9R3r/ymZ73fp1+37OU9hunXSkdl7T3QrhKCtlCM59k2i5CMMSIAGdqxEIwrmptzTsCEut5yilKoJLAcxCq3fe8tLCDBFwO+tKjyuxSCMdYEXoeDrHcHvu0tTwLzmwHA4N/Gh6zNCqqeOSxC2lb8tQSiMwbuqXIqAcjFh2JjBKGJyShQG6ygVbfJegULWBYcMR3rvb6oCRaQwFPgl1M5rR7/JtBZOIZWx/0+s4QeY5z/1/X2tFnAxPpFELaVkdLN8MWGVr4pCBsfMHN8bmTKfCjZ0Ncp456/x58zLzfw6Qf3ABd8pUgEYmqk5bGyek06IQl1bkXScnlN/u8L24Gdx1qVq91KQvrpgwaAAw9p+wnXPw1YjyWMGtDo2ASOFGMU7SIEUzdYD34vMPmXwLbHgdkFYAtlGiim6DpxJtvq9LtlVr/aWKEB8pUXAOOPAFPzwBTZ9r04vdQ9Ts4pAZ3cd+yHxgfMAOH+vcA69/9Uxijmz/AerYpdar1lNSMYzV+vWY/34I8DY58Gph8Bpo8A04vAFEFIknIHohGVR62QhFRSYjQE6qFri2z3iaPAhHNNlxKwArI0Q1IAxwfReacbC5gBPp66/5ICgLKCtqnsrKKlrFZUFPKOr7osMTtdsxzqQRZ93Q1MPARMPllohUxRqkEK6gShOP0S+dY2hlRv99y+ovRi7IiTnTvLqmg6xDPYpqAUgRgsoR7MxgJmgHD/c4E1FXu7FRRbvEgd7evXWlbPpp9EgUjiJpwe6zwOMlvpAWCMVusJYPIYMOlSDZRpoGiNxKzbdIQlXONMWJbGtw4svdgz3El47nzTRvPrrKptAJT6ZrzfintvAJgx4vsvdQvIXK5VYF3sUZxmJUvgA1FOvwF8spKyBtM1y6EepI4LqVMedbEaTp0EIKdPKh5FqYYqSxgo2jgFr13j6XXHnOiSZOeBVSvyC8qC2r05FVvVw9cAMAOA178AWPMp2LJaaekiCPXExwHw660n1oB/niGQazwOkkSepbJ/72I1x4CJ+cJ6lYI1riccrVicUuVSmIW82pkwnHHVOKbFsOozQGkFkwewnBES37ABYMaAX39ZAUCCb82nIlo+40p2gNnvsoKunxH1xGwA/LOzdQOQJPIuHzV2GBg7Cow7AI0l33XfjOsv6oVodes6ISbBsAZMX+kJxU56KY7pkmFVhOciuvTzSt05v0+ryuT/9gDrZNe4wPMsI7VJP3GcP7gUOOdvgL1rRYJ0ZI5IV3hV4/wrGYPPU3/AiRhYusy2K7mU999P+z90ObD7LuBZK0Xdkeq9NSX2+o4HLwfWlopFCC0fgciBMtAFC8CGrYXVoVjnU2G7rTXrzh4kfRzLY1kyGwBoeiGcPiXb5eAzdXWnazPCSScb4j3xfmav8Cx2p50lAMW0VXINitCogl2r9H2dcctWwQxQsn6ZTBbMNtcgdKIbiZj51VcBk38CXPxoQcfCUg8pjcYgZScw/momACnXyr4leBhs5QaBTHpf7X8dMPYJYO8XgAv9e8QJlAZZq8D4xSuANYKPJQn0AR2AHKy1MACKe9nfFI6IEqduEWoHIJ9wlsVKLekoMCa9EAegSTYQeM4TXco2SEMkAHEbBZoj4bbYtdyCVrFqGXgTSxgXYTZeHLi9AMjEQRCVUXP/n4KUaaT8vVTi+Rtg7GPAuYcAWlMCgUVkQfJ2Q12yBvPXMwHImhDWwf81imsTiLSEvHZkr+jY/p9CQRD4p8DOBwteItai05qn31FFdfLlFxYWgCDUIkRkj/TxbCEi/89jfPZ3X2VqYSJQbmUNQY3HQT7hbv2sLoerVwKQHNEEoCsm8R4MhPRjXUGzVEIKIoY7yaEYuY4dgGb5RXruoSgtSCLLarkICQ9f6QNykGjFdjsIBaI4kGlt8W+Rg5g0HJ8qAp47nihAzFpuWtPIMBZJlASILvR6fQ0DCVbJCkJOJCqnk4pGpb99tZ8MopyiKDX7WWDiwYKXiEQOehCrgKh+eJQ+EQHo1Lby/zRlyf8TIbf9XS5ftIb8I92YugH4ay2pLusorl7dAoonWtMwQSTdOFuQSLTGHyIC8kxSIQuA4hwU2WUAoO4/grBcDbsfWElSzg+JCoYDoEGM1ixSkHzgF/wG7y8sIa3J7JPAGWuFJSQIaU01iJHUiYP4e33BrPOHmG/JMaOfTZVYRhwGav87vWKPJ9/rSH4IOGO5sITqg/ggxXs4TOaBAECbeoOsgfl+DrQShFqcEIhyyt0MbMusEkx76iAZXKM8BvXiZAGlF+KaIbaadYpem4aDgpJZQz6YJABV5VcHAJZ0v4FxX6KG5UpYs0KnqjhRuagEVgPglYAl9ciHf8mdUrJh0Qx9vkDBzBywfbkYQIGwahA/kglATsHsDzKA0BATiPyZ4NEDwIeoa/uFYKKXL2f24nQoIgd9R3yQCMTFqwIAfdBWI7+yB5ZLECYLETd85YJl+2YAUNosLIel/xYlu4Jsl6bhNhD6it4WJCvA2Zc4Gxo73RcgJeOqFmGR6rcChLYACyGojmEYdj59KnZ+tIQRhH9IvWA2hiREjDeRI9Cly7fMF3EtWRFawhQIf5IJwE56wdTIYdt7tp9ys1K8JnoJvod9Wn682PNkP4hUy1ndWgstAtBDMLYN5/6PAc5DGNoF4SrZfN+4+IhT8jqwg2Cp8ThIJ5vfSWBXAVCrWN9SMxDK+skaOvhoAc8me654pmUB3f0wyt+E8FyRAGmPlOEoiSD2qgvmAKoOm52fAuiTDHSyIRxx+lI0QxxADubfF5vffMmSajrWlP7nmZ3dSy+4r/ZzAUEHnQ8R70HsXlK+PgJsW68G4XYGZj0EY2EYATCAT6tAhmE0DXcC4faapcwMgAIfLb0kuzT9Qmw5uwAAIABJREFUSi+EfeALkSrpBovbrQDnkm8wAo8/E3i+CCsZ98NCpAp8cUekZyBavI4ET/TnaAk/RQCyAXy6uNSPA0i+wMeB6ePA5HFgZq2wpNGK3FUDAHmv3fSCe7afX8CB4UNEEOolVi/3obastNwJ9cO5BOBKEQMsAcifHWzRAigWWAlCn5K2bQYAOe1KMjTIR2kRUhKVS7IrLia0v+3xwHMZMCbYNP0KfG79zAqK5DxOvyEuWu6VD5KSHy2YAEQAfpaRdl5UkuUctIpBnCIIl4psD03FtIIP1ADAlBuJM47EqqUX3LX9kSBQcuuyftK78xUkHyQ+RLqHZ3Fv1KcgLj5kAQ1s0Qo6IA1nHhNLQzA8ZxvBXuNx8DcS5UYpNnoYxsCnUIqvZo0F3wPTMa7Hv53HOJVbS/l+5bumX7d+5WLE44hxIRJB2NMCqj9ixwuE90svWCaIA6bAp959EKeWChAyA0PTOV2unGMQveCO7bfqHbcS4rJR7Ewqnw5AWhLuImg2uFQAXAVs8RGmntW4+g2hB3P79L/EJ9zGvqrxOPibiVihAOgrWQOf/EBfBcsPNBBqW9Hv6zzGqFzmoXz3B9AePgXiq6bgiv4YOB9QHS8AfpkAFMMjrWAcQA0iO9XJiQyAnos2vV7ESHOOQfWCO7Zf7F40mZFQScRKAYBaSU6vAVcTgN7xXHiUFpDTMK2dFh56912BTiDcvpkATIXzCL4g3WXTZ4jpGfjoF/oihL+fx+0yWUABLwIwtYKKIabgCzHQvi2ggBKn0McEQDaKT5cGkIOo6SuyYzEfjQB0EM5nZgAPoxe8of3sgSqCQM3jkdFLvpRvR13+7UVRuhUFSavNO6otwp88ZZ3+t4M6HLtch6OT9AG/q9cmtf//gV1JDYcnQ2zY6/YakfSrU+Pg1M45NqPt3IEtoM7WFHokyrWKkooglCMWLYjiUXMtK3g8Uzd1WL3gDe3vRRCoUEYCwGtYFxxqgA2E/jI20F5hhmQod98BHNnlxOTig1aGiDanO21yV4DygWuB8YeB6fnC9WEtiKVVKeE0ZGiXWczeJoWMIig5a9V5DA1ANoKDeDylZ9NSXxyAsiKawrQqmCv2HVf5e8aRoxfc1n7xs+khItAUvojvyWryxVcWJZksVSyZoQRA3dcAoHzax4Gj2wtu6FVKM7gMgti02jbV476oUJJs1j/AbA1mQ3Pm8eTRsoZDtR+xZKCiEKmMXTIeXHPGdhYArX8FwG4DGMEnAHIK4yvT58nWC2b73cexaZgWWaEKgU1gjNbPP7PvOYGsUSBkv3hBtmRWNzxjTk9RWktvxp6POj0vARjY9sWkFel8RWxegjIF4RjwAOnZWMPBTGjqvHmszxJOBUD3xyznL2bqROvoP3N3q84jG4C7M/PpcvMBef0cvV9k6hXv+2Yno5QfGArRbaCC0mWv2YtF3ecerNDhkNZIIsXQRv5dlTtGADJSz2gEE1EJQM//026HdIEZLC8B6A0tk0g1Ja8DuzJdphS82QBEZj5dbj7gxZN5er/IZI+67pscgE7QaDOUMyC0Wb8+gXjuR4F5J6YsaXnFhBoAGEVvUhb60jISgCQnoh/OLBgvIrL8v7DdFkEYM5dtNg97tvz5zJqzdfIBmJlPl5sP+DJP5xtW7xffnzeh7H+Z+3+RpkyWT1YxuURJYVtx6T0fCTocouQV85VkHRIGegEuEv/YKpkA/JceVmL8kv6t5/9pu62tfiPWcFQVEa0DZ9WcLJEPwMx8uvfnjT9IgZyj94t/ldeA/S9tMaGa9SNdmsIxbvVscVJ1GScoMt4UPwhAsmMZ0aXzQBsvdGRBjQz0FUpEJRAJQOq4KAnBdz+sfiPJ3bOYn8fsykyVWMfiN3BOzckS+QDMzKe7OW/88aqQzsfE5kH1fvGjeQ0wADodmVGwOeiMsUqHrGOnS4UFy9P/wAEojkEnI+IqOIJQNLgpCXhcmLAtD/D+kgQE235L93tj+YBqgTX9BiCeW/NedT4AmQ+YkU/3sbzxBymQuZhm8g1T+QbV+wWFdjKO/Te2mEFNlCb6gPF708VJ1TXHgKd91GnZpDfi1k/gM2vqU3DUnCuBmNQe3P9vw6pe229KOvB0K1k+ZS+rnrfM2AlA3JMZtah/EZKZT3drxuDz1O/yxAwu9JgJxr3lQfR+8aa8Buy/wdWQZAVl+ZzCrG3q9c/YrkmHy3IRYryAAqAkEBIlopJxNNUbER+fA/H+/+AAdP9PmS9dazicJybm7mlB8nR2dI1HvgVkOlZGPt2nM29GCamcGZjAwlQ+vvrV+8X/zGsAAUiLVPp/wd+zaTMFWw+/kAA0GQQnpCw5mDsAMIrcRB5mC/+MAffTwgfwKY2KfmCZ6ZIkUShrxXxBX4yYaV8Hzmcn13jUA8CMfDqWYeQcSkhVOl8U6uxH7xekrsg49h8oiCENgC5TUG5vKxxT8f2aRtOtcAKQ1s8soPuOVUIwpchNlEEIOyNSIrrvv3hwnckWIZPZsnbcDyzTpvg3lU8mpZQqozyfK74aj3wAKh1LgrsD5tMxiz/nkGD1sHq/YNFOxkEAcuW7oqmXlisuQOT7VV2jwi/kTgj1RkoZhBje8Z83SCAEEJZW0C3gff8tADCt4VASaWIBK0HI9q8BF5yUAMzIp8tNx5Jg9bB6v/jdDPSRns0BWIZeUitIo9IhHmhXTvzCPQddccnZ76U1V/IvC4SBCFyg26DFNg7c++Mhhb6qiCikT7WVUmr6lYn2nRKyrdZ51GMBlZIc07GUBdMjny6XCiUmpA6j94vMZbgBMFo552pu27PXAqXTyAUQcitOQjAm9xX0N9pIwIPmSCmH5QuPqER0L4kDYgp9zOUL6fYxkbZcFceyAreAF3GlV+NRDwAz8uksnT3jiILVSmpWNlhMze+k94vMZfgGAPJeHDjpCrgM01Tdry9OzvmYAzAqLVWIwEShwzbRwwSEn+MqP6bQK5tZlWyhjCCCsC19Xv7gOnBRbgp7cu/5AOyVjqVMmA75dJZ9nHF0yohWNlhMxKnS+0XmMtwAmFq4imnYbrEqNJPc+9kfd62RKh0On8qV9hXZ9askEPgAfI56ziocUgVbzGT28lEtRMoKtg7lBHtznfZNA+CQ+XQWM8k4uglWK/NLYKzS+8U9GReXD0g/Tyvh4Ne17Yb4Zbr6g6y7/aNWcoPpjKRTsJIags5IJwkEAv6en05S6GUBfRWsUExZyVZVQCQwrgN7Wfdd41GPBczIp8ODeXfTSbBa6YYxlY8/p3q/udc3C+jTbtvqt2oadnB2m4oNgMn0W0p+hYWHWbwg9yU/0Kb9EIy+5y2hiCit4UgKyTeAkN8Valk4Le/ldlONRz4AWWBRM6fdIPfHstw/G+SE5rMnVQ/kA5AkLHS0ak7V7reXfhgACaBqDtD3e/nmc5k9kA/A80JReq+U38zGVp3ObJo/BvAOD3dtwiWar9zEHsgHIGlFubqSx7+Jja36anLLcDvvgwA+NDpDfILv+qlzuXwAXuSjrkKemlO2e3U1uWUYnL8dwB/5e2apca9LNv+vsQfyAUheX4VguB+mzIsaG9ntqxhF4Xbe3QD+n7/uHLAW9wQ1tblMRQ/UA0CaHC7plXEh+q4T0OWcfhleYTSHBK0EH/mi+fcRuKQn4I6fWpeoB4AevCz3HOOm9yb3F5mBlZBNclYCj1aRfyfrbgPCTR6AzK+vD4CyglX7jpmN7HY66d1E0ctdIrEEE4wEIMlam+Pk7YF6AMj7EwAVbU82vTerCwhAXopJN9zVI+AYrOeULLZgErY2x8nZA/kAJGWr0naUWdFpy2cT+oCWjpdjLFxE5UzYIBBpEUX5nLnlvAktb76SPVAfAOUHpiAMm96bsVtCAMaKALICMyxDq6cXfycA+b/mOLl6oF4AiqBRIEzBp7/X2Af0+fi1XIioMIlAI+AIPIGPmeROWV3j1Zuvyu2B+gHoFfZiDS2lC0LiY52WUADkQoTTMH1BFSYRdHoRfKSu5v9qrizMHYPT+vx6ARhSuDcAzzmDo5ZGHT1PAKYMwQxME2jiSo/gEwBrrq+u41ZOy++oD4BaCcsXTPiSI3ey8s4KGoG8QwCMFM+0ggQhLR0BF19SXuD/ayakz7uR0/TsMcxg3SjfqWNA0hsrga/ojaq/8WPcC+YIk4Ke4CMSuB2XVht1Oj8zIfXlU8BtU8DhmYRXWdfrdF1fgr3+S8At48CD04DVjXQSDO70PTUnaJ5uOCwsIIFHSSFy1pKPWCDsZxCpw8UVgKSPxLXM937OzxxAljzcPAbcswU4Qh4V3UN8mKoeKm/bu78IfKJQa8VD48CylHQiL3O3/qg5Rf30BKACMtJXjXKQcfBSK8Dfqc3KVCwuN2VFGRnm/yKZtq4Re5ifyQQgM2A+BeB3GHaZBo5MAIue0l7Kt3cC4xhw+5eL7TuCkJk1jBtyerbUfYG5ExjZ/pqrxE5fAOrOq5SmowVIrRp1IyT2R6+fg0bgVYG4CsyZe2UsaiOGKXr4Sfp9k8CxCYAFSKyvXeY1o1BxQux91yMtfsHPutgnnyUuUvhc0ZsgUXib+nVkq6+ZKaABIHsgVZnuwD9sVo66rrR4ImdhLGSQ8zPL/JgBQxeU1ouWkO9PTgDzbgmXxrzMkatl3keivfG5x4r4IRcz5BfkO5vEZ0kgpIfBZ8yKjlL17syy0tMNcOn9dl4Fy6dLFabj1Mpvow9Ify+I4Nlo9Xt+ZqU9VdJpqZh4QDDyxUyYOYJwHDg+DhgI/WUVZl7aSEt93+GO9Ia2iuZKOfA7lhp9JpvAVy61w2mOwO5hmCgMHC1H9O24gu6UD9jP+ZmbtLRaSsei9SL4XDPbAEh/kGQ/pSUcc0lbApFWb67lQUhpVnLBsoKqqZclFMmUtrxPcwxl3X7vOCAtYLSCcugFQmqhdssH7HU+RznjiOlYXA8wqkOfkItTAom+oKygca4ES8jY+N3z7fSG4hfUtp3ihUHruVSsFy1iRvNP+1N7A5BdJACmVpAgZPhGOyCigEjlPLudn7kvFtOxuB4g6OjD8UWLRkCZFRwrLCEXJQQhp2K+37lQeBCRX1A7KPQto1prFEmSYn2mB9EAsO+kYfk8KQhZF8yjVz5gp/MztyOUjiW9bCUhEBhKRCCgSis45uQ/PhX/xfFWMgOnWu2gxB0TF/o0kEZ/kCDM1Ts+3RHYnwVUL6XhDFrAswfIB6w6P1MrTulY0sum1VICglKwCEACqvQFCUK3gHcsFQCM/ILayqP1k9JshVqrncMalOYYvgcGAyCvIwuod8YBJQmZpmGJeyRwkGw4n8jJOJQNw3idLFhMRNB0SgASTJyKoy/4ieXCeFfJBUeV2SoAclFyR0bbm1OHTUiN0/DTAwD7zQeM52dqj8VsGEkVE2jKetG7AEhQ0frJAv6RC0trC1skl+IWlNinGLbSaZg7Mc0xfA8MbgF1LQV1z08A2G8+oM7PVF9Ms2GUE0gQyp+Lwu2yagLgR9ZaYpkSypQ6a6Q2DCqzpkvietXIFdoZfuieGmcOD0DeP0HEbBhNwYPmA/L8zJQsATAKnguEqS+XTqkE4YfWWwCUFZTksYAYwZfIBeN9Tw0cjOwu8gDIZqsoSSvhEeQDiiGYFoyWiSDRypWgi69UP5sc5fIcquSCNeXqe2X9ZAHfM7Khe2pcOB+AT41+aO5iRD3QAHBEHd9ctuiBBoANEkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cvAFgg4GR9kADwJF2f3PxBoANBkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cfOxqYJ2au9RdPtdp/khoEOlglDYT39V1PzQFXLsMXAlgt9PCxJKPbufyf8/KHIPfBPAZABf79Xc5XQ0ZQ1Q7360NbxoHrlsDvs5ZRsgo0une06by6X1mZvtP99PNAp4F4LsBXA5gjw8EGTeqaGF4QhzQF80CX7cAvGIdeDYAfhdZ2sTKUcVrpE7nd31N5gj8e2dIo2osk7NZpMdK0Z19tv+bJ4F9K8D1ACj8yfNSikHeg+5Z969m57Y/8/ZP+dPLKZhP/rcA+AYAF7g1oRUhEMUzFMt6eSJfX78b2DkPfM0i8GIAX+uWlAMppreUUErn8p2gzTl+2flg/sDbTkvIOik+CP20//mzwAXzwDcCuNTPJeFXpEpM6QEjIHm/zTF8D7T5gATYNQCe69aAloRTGulfBESBSYNyxR5g/Bhw7hKwZwl4vk9LnM5JmsBzUyDGAX3B8G23Mz/g9BuUa/0IiutfMkj7zwKmngAuXSvOpUvAWYBtF4BTnspIj/O8zPaf7qdvWITw6eZA0JLQEhKEGgxZhUj/dz3NzSKwbR44exnYvVKcy+mM5Km0JhxInUtrGkmzCPicg3W5LMGkQiZZTm9xS9Z3+4m2o8C5c4X15pTKW2Lb+fCx7WLtjYxzqiql29Icw/dA5SqYf6RTTilg+lYCIXmICKQ4IK9wxfSJY8AZK8CuFWDnanEua9ZTAMsaCog3Dt92O/MvnRGBtGwkqKRmMEkqCaa+2k+0LQDTh4rP88UHj74kF1WaATo9QHQ7mmP4HugYhtEKj4PB6ZQ+FS0hQahpldPya1kXTOqNY8DscgG+HavAttUCvBxInitrkgL4lcO33c7spBdM3kAuSnq2nx9gQfAh4JyVwvrxwel2z3p4aMlzH6DM2z/lT+8aB+Q/OT4EEqckWQSBkGD6EQKQnDCLwBSnYgcf32fXioGUFawC4esyu7CXXnDP9tOCsyD4KLB1rmgvX7zfbu2WG/Jtme0/3U/vKxBNAMoi0KcjkATCN3HOEr3UAjDrwOP71rXixYEkeKMFlSX8ocwR6KUXTJ7AaNE2tF8WfA4Ye7Kw1mwvX/yZn+eKnvcrfzC6IK/ObP/pfnpfAGQnySoISBqUXyAASS1AK0JfagWYcRDOrAF66TxZQU7jBOEbM0egH71gcgXSFZAV54NQtj9YcNIpbONCyh8Ygi8CVospApDuB63g92W2/3Q/vW8AsqM4gLIKBBIH8bcJwMCNMX68BTqBb8s6sGWtsIA6jwDk662ZI9CvXjA5A6NVa2t/IAicnC/aGV+8T74IQPm/AmGuBc+8/VP+9IEAyLslAKMV/LgAyIUInfnjwPQqMOOgI/DstQ5Mr7UAqMF8V2YXDqoXXNl+EQQ6N9v29aKdesUpWJZbAPyPme0/3U8fGIDssDid/pUASCvCaXgJmFguAEfgEXT27gDkuwaUg/nbmSMwjF7whvbLhSDL5TwwvdRqo9oqHzACkCB8U2b7T/fThwIgO01T1IMCoAZxGRhbKoAXQUcQTjkI+a4B5e5FzjGsXvCG9gdqrLGFYrpVG/UuHzBOw2/LaXxzbh43DKeoJwlAHqLndSs4udoCoIBHQE45EPk3DuitmYOQoxdctp8+rFwIWsGFYiFFoLGNchcEQC6e+OJC5J2Z7T/dTx/aApYdJ37AyJK/DIwvFxYvWr0IwEn/H1Opco5sveDUhSAAF4HJpQJkWixp6k2n4IYfMGf0amDHev2I8+l4/UbvNw8Eozw72wJePOJ8und7EkKj9ztKGA1/7WwATo44n45pWI3e7/AAGPWZ2QBkYHCU+XTMfGGQmYIxjd7vqOE0+PXzATjifDrKtTZ6v4MP/MlyRj4AR5xPF+VaqZLJF1UzKdPV6P2eLDDr3I58AI44n07ZMARbo/d78gMubWE+AEecT8e9YOn2Uheu0fs9tUCYD8AR59MpG6bR+z21gKfW1gNAz4geRT5dTEZo9H5PPRDmAzBmRM8BJzqfLiYjSKKr0fs9dYBYDwBHmE9XtRfMsIz04aQZ1+j9npygrA+Akqs8wfl0BCCTWRq935MTYL1aVQ8Ao1zlAnAi8+kEQGZTNXq/vYb75Pt/fQAcUT5dBGCj93vyAaxXi+oDoFLyT3A+3Rcavd9eY3xS/z8fgCQX/LPR3SOzkon55jg1eyAfgD8M4NcAPD6aDmBtB1e4NMDNcer1QD4AbwbwxwDe4UvRE9wHZG1gNSXDLlwLNcep1QP5APxzzwj9IIAPnXhT5ORc5EYCA9HNcWr1QD4AmRH6FQBMTSZZH98ZmD5Bh5g1FopiNns1x6nTA/kAvAfAEwDudnI+EvQxPfkEzYfaCXRSBluQMB7YHKdGD+QDsBNBH/9+AkAobqTADGK7Inw1x8nfA/kA7EXQt8kgrGAGMfBxZ5Cv5ji5eyAfgL0I+r68uR0QmUFoBQU8vfNvzXHy9kA9AORoMw7CdGQCjoUZDwL4kv/+8OZ1gJhBIjGDgMh3vTavBc035/RAPgD7JegjODfhiMwgoqeJwNPPTaB6Ezq/hq+sB4AcXeXEP+ZhGVo9vRimIQD5v5oPAZCupgDI9wg8/qz/1Xz55usyeyAfgMMQ9GU2Op4eAchpOIJQQEz/VuPlm6/K7IH6AMjgGzdl6QtyX5jWjpQFevF3lq3xf6yhrOlIAUgQCojR8gmE+l9Nl2++JrMH6gEgR5UA5KYsc+AZmCbQCDi+IvgEQMob1XBEAHIajgBMLV+0kCdws6aGu3zqfkV9AGTwjftg3JRVVRAtHQEXX/wbAcoXP5d5CID8GoJKvqDAloKOoIz/y7x8c3pmD4zhaqwjRzCYyQg5gr2ZgsFTLweWr8XQgsXjbwLWrnNtMlKgNoLBmZAa7PTCAuYIBlMvlWQswwr2UlUw45jdDSx8HbD+Ctd+HVCwePKbgJV9aASDM8Yg59TWFDysYPBtmYK91IbNOHaPA/M7gUXKXA4hWDz79cA8+W0aweCMURj+1HYfcBjBYO54MMY3tGDv8I3nmWSHOzYOLJ0LLPGXAQWLz3oB8MQUsEa16kYwOG8whjh74yJkUMFgbsNlCfYO0epwissVY34bsHw2sEIRkAEEi/dcU0SP5qhF1ggG5w3GEGdXr4L5134Fg4kAjuDQgr1DtDqcUmZETwArZwAru4BVqsv0KVh8/o3F4v0QXZBGMDhvMIY4u3MYhv95Zh+Cu1xBcxuOU/HfeDIq5cv7FuwdotXhlCBXjOXZAnyrO4BV6in0IVh8wStLuWCsUAyvEQzOG5ABz+4eB+R/ewnu/kOP/3G/l4kJTERlljQtIot2e53/IwO2OPl4FLtcnCqAp9cahT56CBZf+LpSLhhz1N5qBIPzBmTAs/sLRHcTDKbiNHdBGGymOC/3hglEvgjAnoK9A7Y4+XgiV4zVWYDAs/etxaubYPFFP1QkLtCIP8neaASD8wZkwLP7AyC/tJNg8L/xLNBu+YBdBXsHbHEFAINcMVamgdWZAoRrfPdXm8KitLdmgYveWAq+2y7iMqfuRjA4b1AGOLt/APJLqwSD3+y5T1yI0AoSbAxMMzGV1o8/My2ro2DvAK2t+GgiV4zj4+3AIwDXtwBrVJeuECze+9aW4Dut4PxkIhYsdetGMDhvoDqcPRgA+SWp4O4veQ5Uv/mAGwR78+6rQq4Yq9PAOi2fA4/vBkKudKVU7VZw77uKvWFuZbtcMNb5v0YwOG9g+jx7cADyi6Pg7gccgIxlcA5TKhaD01yYKBmVFpBZMfx/m2Bvny3t8LGqoqTliZbVI+gMgHwnMAnCIFi897cLAAZ6QyzFzzSCwXkD1OPs4QDIL5XgLmk5JHk/SD5gKdibd38VcsVYGmuBTaAzEHLHgyCcaokB7/1IkUET5IKxwF5pBIPzBqbPs4cHIC/AaeqvPL9pmHxAE+zts6VdLCD/lcgVY3UyWD0Bj1ZwqgCggXA7sPfWAoAJvaEtZBrB4Lyx6efsPADyCtmCvf00s/NnOsgVY3m8BTRZPZuGBUACdArY+5lWDqGmYbIrLHEx0ggG5w1OH2fnA7CPizQfaXqgUw80AGywMdIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0BxoAjrT7m4s3AGwwMNIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0B8ZYNMbkX+ZekpuIiOQrPar+xs889HJg6jZg5jAwvVZ8B+ll9PlO5/Fc/o+ECjnHfi8zYfkvM5ulmp4qJXVqx5deD4zfAkw/CGxdAZgoHfuh131QkaI5hu8Bs4Ds8B0AWLnIRGCBsFfn87JffDMwdjOw5R5g8giwZa34jnQQUwDo99wBfJ4TM7COiNdlaj2rA/jeV/vfDeATAP4UGH8I2Lrc6gc+SHqY4oMZ74VSKM0xfA+UUzB/oBUUCKMl6zSQ/PsXqZD5KQC/A0w/DEwcAcYXgYnVwppwADuBkefnCim90FmBWXwnK87Uen53BI8sbuwqaz9p5UgnQhBS+ZN1zE8Ak0utviCwq8DI8/nx5hi+Bzb4gJzKZE1SEFZZgS9/2pWR/gTAJ4HJQ8DEMWB8ARhfBsaWCwDquwQKvvNgHXvOcYVbPFJPkw+dDxC/W1Y4tWDpw/Rlgo4lo1T4/KxTihDNpJwj3/UiMLXemprjffC7eWpzDN8DlYsQDiKtVxzEqoHkyX9HRizW+nIgaQnvAiaeBCbmC0s4tgSMu2rMePAR9X252jXklaTFU108K0MHav/nvJ6ZxVVk9OI7GR2IZoGQNc/HgbHgIwqILIVujuF7oOMqWFawCoRxkfEIB5CWgkREBCNf9wMTc8A4QciBWyoGz16rwNgaML5eWKpctYZL3N+TWLX0gvtuP0HHk2n16JDyxXmVhfU0qywbJbr5GSuXKxA/sV5Y9UYWdnjwyS3qKKgarWA69Wg6fjQOIK0HadnIjPVFB+AiME4AuiUkCFnESyCSkmAuU7Cjm15wX+2X2ifBRn9A8mKcW2UFjULVQcgVDl80u40SYh763FfvquhLCxitoBYUsoJfjXKttByMq9CKcHn4sPuCbgXNJwyWkECcz5Q376UX3LNncZyQAAADEklEQVT9fFgIJs6lBBwtn3Tt6FpIz4RWnuQxPh2XIGzm4CwQ9hWIFgBTK0gQHiIAJddKq0ELQh+KL1qUR4MvSEsoENIKrgALHNiMox+94K7tl9qnnMio8MSf6SNwGpYVjCDk/Ju7isq496fCqX0BkDeqlWwKwic1gAQSpzGREnFgREz01eALLvvq2Kfi45m6cf3qBXdsfxRbJMho8dimqOhEK8cXQRr9QVpvPoDNMXQP9A3ACELFxPh+jACkP0fLIKFCCRRqKuPUdqjlC9o07JZwKVNHeBC94DQcZO0XAAkmgotAk9QYrR9f/BvByYfMSATDVMzwTXMM3QMDAVAgVHCZ7/MaQK4QZUHiNCbBQlqUw74YCb7gcmYkelC9YFlwvVv7RRAorTuBkECU9asCID9/x9B935zYzyKkqpfiNHxcA0gLQgvBAaPVkCqm3h2AtC5m/RyEqzw/4xhGL3hD++MmslgqCbgUfLKAcRrmTlBzDN0DA1tAXUlWcDm1IOIIJAjlT/Fd05lbFQFwjdtgGcewesFt7Rc/Gx8iWjUCjGCT1YvWT1MwgUqrf3NG45tTbcu0aximWx9xENcEQHGbcYAEwtSXSqY0gnCdgeuMI0cvuGx/FUGgFhwEYrR80QckWN+X0fjm1DwAWv8RgJFilJZBznz0pQg+AZAAlVWh1GvGka0XzB0cCQi30aSGVa9AF62fLOB7MhrfnJoPwPER59Px+o3e76mL5Kwp2G57xPl0kxc3er+nLvyKtLmhfUC78RHn081ONnq/pzcAR5xPR9mRRu/31IVgvgUccT4dNaobvd/TGYAjzqejumqj93s6A3DE+XRUg2VSCjdaGr3fUw+I+VPwiPPpqJjO8J1Nw43e7ymHwHoAKMFd7QErAeEE5NNJMb3R+z3lsGcNzgfgiPPpomJ6o/d76oGwPgCOKJ8uKqY3er+nKwBHmE+noqRG7/fUA199U/AI8+kEwEbv93QHoEhZTnA+nYqSGr3fBoAtaiqBUImdm5hPJwA2er+nKwBHnE+X1gUzSbnR+z11wPj/AeCpPDD3t7rvAAAAAElFTkSuQmCC",t3=class extends tt{constructor({blendFunction:e=30,preset:t=1,edgeDetectionMode:r=2,predicationMode:a=0}={}){let i,s;super("SMAAEffect","uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}",{vertexShader:"varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}",blendFunction:e,attributes:3,uniforms:new Map([["weightMap",new eQ.Uniform(null)]])}),arguments.length>1&&(i=arguments[0],s=arguments[1],arguments.length>2&&(t=arguments[2]),arguments.length>3&&(r=arguments[3])),this.renderTargetEdges=new eQ.WebGLRenderTarget(1,1,{depthBuffer:!1}),this.renderTargetEdges.texture.name="SMAA.Edges",this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name="SMAA.Weights",this.uniforms.get("weightMap").value=this.renderTargetWeights.texture,this.clearPass=new e_(!0,!1,!1),this.clearPass.overrideClearColor=new eQ.Color(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new tT(new t0),this.edgeDetectionMaterial.edgeDetectionMode=r,this.edgeDetectionMaterial.predicationMode=a,this.weightsPass=new tT(new t1);const n=new eQ.LoadingManager;n.onLoad=()=>{let e=new eQ.Texture(i);e.name="SMAA.Search",e.magFilter=eQ.NearestFilter,e.minFilter=eQ.NearestFilter,e.generateMipmaps=!1,e.needsUpdate=!0,e.flipY=!0,this.weightsMaterial.searchTexture=e;let t=new eQ.Texture(s);t.name="SMAA.Area",t.magFilter=eQ.LinearFilter,t.minFilter=eQ.LinearFilter,t.generateMipmaps=!1,t.needsUpdate=!0,t.flipY=!1,this.weightsMaterial.areaTexture=t,this.dispatchEvent({type:"load"})},n.itemStart("search"),n.itemStart("area"),void 0!==i&&void 0!==s?(n.itemEnd("search"),n.itemEnd("area")):"u">typeof Image&&(i=new Image,s=new Image,i.addEventListener("load",()=>n.itemEnd("search")),s.addEventListener("load",()=>n.itemEnd("area")),i.src=t4,s.src=t5),this.applyPreset(t)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(e){this.edgeDetectionMaterial.edgeDetectionThreshold=e}setOrthogonalSearchSteps(e){this.weightsMaterial.orthogonalSearchSteps=e}applyPreset(e){let t=this.edgeDetectionMaterial,r=this.weightsMaterial;switch(e){case 0:t.edgeDetectionThreshold=.15,r.orthogonalSearchSteps=4,r.diagonalDetection=!1,r.cornerDetection=!1;break;case 1:t.edgeDetectionThreshold=.1,r.orthogonalSearchSteps=8,r.diagonalDetection=!1,r.cornerDetection=!1;break;case 2:t.edgeDetectionThreshold=.1,r.orthogonalSearchSteps=16,r.diagonalSearchSteps=8,r.cornerRounding=25,r.diagonalDetection=!0,r.cornerDetection=!0;break;case 3:t.edgeDetectionThreshold=.05,r.orthogonalSearchSteps=32,r.diagonalSearchSteps=16,r.cornerRounding=25,r.diagonalDetection=!0,r.cornerDetection=!0}}setDepthTexture(e,t=eQ.BasicDepthPacking){this.edgeDetectionMaterial.depthBuffer=e,this.edgeDetectionMaterial.depthPacking=t}update(e,t,r){this.clearPass.render(e,this.renderTargetEdges),this.edgeDetectionPass.render(e,t,this.renderTargetEdges),this.weightsPass.render(e,this.renderTargetEdges,this.renderTargetWeights)}setSize(e,t){this.edgeDetectionMaterial.setSize(e,t),this.weightsMaterial.setSize(e,t),this.renderTargetEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t)}dispose(){let{searchTexture:e,areaTexture:t}=this.weightsMaterial;null!==e&&null!==t&&(e.dispose(),t.dispose()),super.dispose()}static get searchImageDataURL(){return t4}static get areaImageDataURL(){return t5}};function t8(e,t,r){return Math.min(Math.max((e+t)/(t-r),0),1)}var t6=`#include <common>
|
|
576
|
+
#include <packing>
|
|
577
|
+
uniform vec2 cameraNearFar;
|
|
578
|
+
#define cameraNear cameraNearFar.x
|
|
579
|
+
#define cameraFar cameraNearFar.y
|
|
580
|
+
#ifdef NORMAL_DEPTH
|
|
581
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
582
|
+
uniform highp sampler2D normalDepthBuffer;
|
|
583
|
+
#else
|
|
584
|
+
uniform mediump sampler2D normalDepthBuffer;
|
|
585
|
+
#endif
|
|
586
|
+
float readDepth(const in vec2 uv){float depth=texture2D(normalDepthBuffer,uv).a;
|
|
587
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
588
|
+
float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d;
|
|
589
|
+
#endif
|
|
590
|
+
return depth;}
|
|
591
|
+
#else
|
|
592
|
+
uniform lowp sampler2D normalBuffer;
|
|
593
|
+
#if DEPTH_PACKING == 3201
|
|
594
|
+
uniform lowp sampler2D depthBuffer;
|
|
595
|
+
#elif defined(GL_FRAGMENT_PRECISION_HIGH)
|
|
596
|
+
uniform highp sampler2D depthBuffer;
|
|
597
|
+
#else
|
|
598
|
+
uniform mediump sampler2D depthBuffer;
|
|
599
|
+
#endif
|
|
600
|
+
float readDepth(const in vec2 uv){
|
|
601
|
+
#if DEPTH_PACKING == 3201
|
|
602
|
+
float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
603
|
+
#else
|
|
604
|
+
float depth=texture2D(depthBuffer,uv).r;
|
|
605
|
+
#endif
|
|
606
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
607
|
+
float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d;
|
|
608
|
+
#endif
|
|
609
|
+
return depth;}
|
|
610
|
+
#endif
|
|
611
|
+
uniform lowp sampler2D noiseTexture;uniform mat4 inverseProjectionMatrix;uniform mat4 projectionMatrix;uniform vec2 texelSize;uniform float intensity;uniform float minRadiusScale;uniform float fade;uniform float bias;uniform vec2 distanceCutoff;uniform vec2 proximityCutoff;varying vec2 vUv;varying vec2 vUv2;float getViewZ(const in float depth){
|
|
612
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
613
|
+
return perspectiveDepthToViewZ(depth,cameraNear,cameraFar);
|
|
614
|
+
#else
|
|
615
|
+
return orthographicDepthToViewZ(depth,cameraNear,cameraFar);
|
|
616
|
+
#endif
|
|
617
|
+
}vec3 getViewPosition(const in vec2 screenPosition,const in float depth,const in float viewZ){vec4 clipPosition=vec4(vec3(screenPosition,depth)*2.0-1.0,1.0);float clipW=projectionMatrix[2][3]*viewZ+projectionMatrix[3][3];clipPosition*=clipW;return(inverseProjectionMatrix*clipPosition).xyz;}float getAmbientOcclusion(const in vec3 p,const in vec3 n,const in float depth,const in vec2 uv){float radiusScale=1.0-smoothstep(0.0,distanceCutoff.y,depth);radiusScale=radiusScale*(1.0-minRadiusScale)+minRadiusScale;float radius=RADIUS*radiusScale;float noise=texture2D(noiseTexture,vUv2).r;float baseAngle=noise*PI2;float rings=SPIRAL_TURNS*PI2;float occlusion=0.0;int taps=0;for(int i=0;i<SAMPLES_INT;++i){float alpha=(float(i)+0.5)*INV_SAMPLES_FLOAT;float angle=alpha*rings+baseAngle;vec2 rotation=vec2(cos(angle),sin(angle));vec2 coords=alpha*radius*rotation*texelSize+uv;if(coords.s<0.0||coords.s>1.0||coords.t<0.0||coords.t>1.0){continue;}float sampleDepth=readDepth(coords);float viewZ=getViewZ(sampleDepth);
|
|
618
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
619
|
+
float linearSampleDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar);
|
|
620
|
+
#else
|
|
621
|
+
float linearSampleDepth=sampleDepth;
|
|
622
|
+
#endif
|
|
623
|
+
float proximity=abs(depth-linearSampleDepth);if(proximity<proximityCutoff.y){float falloff=1.0-smoothstep(proximityCutoff.x,proximityCutoff.y,proximity);vec3 Q=getViewPosition(coords,sampleDepth,viewZ);vec3 v=Q-p;float vv=dot(v,v);float vn=dot(v,n)-bias;float f=max(RADIUS_SQ-vv,0.0)/RADIUS_SQ;occlusion+=(f*f*f*max(vn/(fade+vv),0.0))*falloff;}++taps;}return occlusion/(4.0*max(float(taps),1.0));}void main(){
|
|
624
|
+
#ifdef NORMAL_DEPTH
|
|
625
|
+
vec4 normalDepth=texture2D(normalDepthBuffer,vUv);
|
|
626
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
627
|
+
float d=pow(2.0,normalDepth.a*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);normalDepth.a=a+b/d;
|
|
628
|
+
#endif
|
|
629
|
+
#else
|
|
630
|
+
vec4 normalDepth=vec4(texture2D(normalBuffer,vUv).xyz,readDepth(vUv));
|
|
631
|
+
#endif
|
|
632
|
+
float ao=0.0;float depth=normalDepth.a;float viewZ=getViewZ(depth);
|
|
633
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
634
|
+
float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar);
|
|
635
|
+
#else
|
|
636
|
+
float linearDepth=depth;
|
|
637
|
+
#endif
|
|
638
|
+
if(linearDepth<distanceCutoff.y){vec3 viewPosition=getViewPosition(vUv,depth,viewZ);vec3 viewNormal=unpackRGBToNormal(normalDepth.rgb);ao+=getAmbientOcclusion(viewPosition,viewNormal,linearDepth,vUv);float d=smoothstep(distanceCutoff.x,distanceCutoff.y,linearDepth);ao=mix(ao,0.0,d);
|
|
639
|
+
#ifdef LEGACY_INTENSITY
|
|
640
|
+
ao=clamp(1.0-pow(1.0-ao,abs(intensity)),0.0,1.0);
|
|
641
|
+
#endif
|
|
642
|
+
}gl_FragColor.r=ao;}`,t9=class extends eQ.ShaderMaterial{constructor(e){super({name:"SSAOMaterial",defines:{SAMPLES_INT:"0",INV_SAMPLES_FLOAT:"0.0",SPIRAL_TURNS:"0.0",RADIUS:"1.0",RADIUS_SQ:"1.0",DISTANCE_SCALING:"1",DEPTH_PACKING:"0"},uniforms:{depthBuffer:new eQ.Uniform(null),normalBuffer:new eQ.Uniform(null),normalDepthBuffer:new eQ.Uniform(null),noiseTexture:new eQ.Uniform(null),inverseProjectionMatrix:new eQ.Uniform(new eQ.Matrix4),projectionMatrix:new eQ.Uniform(new eQ.Matrix4),texelSize:new eQ.Uniform(new eQ.Vector2),cameraNearFar:new eQ.Uniform(new eQ.Vector2),distanceCutoff:new eQ.Uniform(new eQ.Vector2),proximityCutoff:new eQ.Uniform(new eQ.Vector2),noiseScale:new eQ.Uniform(new eQ.Vector2),minRadiusScale:new eQ.Uniform(.33),intensity:new eQ.Uniform(1),fade:new eQ.Uniform(.01),bias:new eQ.Uniform(0)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:t6,vertexShader:"uniform vec2 noiseScale;varying vec2 vUv;varying vec2 vUv2;void main(){vUv=position.xy*0.5+0.5;vUv2=vUv*noiseScale;gl_Position=vec4(position.xy,1.0,1.0);}"}),this.copyCameraSettings(e),this.resolution=new eQ.Vector2,this.r=1}get near(){return this.uniforms.cameraNearFar.value.x}get far(){return this.uniforms.cameraNearFar.value.y}set normalDepthBuffer(e){this.uniforms.normalDepthBuffer.value=e,null!==e?this.defines.NORMAL_DEPTH="1":delete this.defines.NORMAL_DEPTH,this.needsUpdate=!0}setNormalDepthBuffer(e){this.normalDepthBuffer=e}set normalBuffer(e){this.uniforms.normalBuffer.value=e}setNormalBuffer(e){this.uniforms.normalBuffer.value=e}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.BasicDepthPacking){this.depthBuffer=e,this.depthPacking=t}set noiseTexture(e){this.uniforms.noiseTexture.value=e}setNoiseTexture(e){this.uniforms.noiseTexture.value=e}get samples(){return Number(this.defines.SAMPLES_INT)}set samples(e){this.defines.SAMPLES_INT=e.toFixed(0),this.defines.INV_SAMPLES_FLOAT=(1/e).toFixed(9),this.needsUpdate=!0}getSamples(){return this.samples}setSamples(e){this.samples=e}get rings(){return Number(this.defines.SPIRAL_TURNS)}set rings(e){this.defines.SPIRAL_TURNS=e.toFixed(1),this.needsUpdate=!0}getRings(){return this.rings}setRings(e){this.rings=e}get intensity(){return this.uniforms.intensity.value}set intensity(e){this.uniforms.intensity.value=e,void 0===this.defines.LEGACY_INTENSITY&&(this.defines.LEGACY_INTENSITY="1",this.needsUpdate=!0)}getIntensity(){return this.uniforms.intensity.value}setIntensity(e){this.uniforms.intensity.value=e}get fade(){return this.uniforms.fade.value}set fade(e){this.uniforms.fade.value=e}getFade(){return this.uniforms.fade.value}setFade(e){this.uniforms.fade.value=e}get bias(){return this.uniforms.bias.value}set bias(e){this.uniforms.bias.value=e}getBias(){return this.uniforms.bias.value}setBias(e){this.uniforms.bias.value=e}get minRadiusScale(){return this.uniforms.minRadiusScale.value}set minRadiusScale(e){this.uniforms.minRadiusScale.value=e}getMinRadiusScale(){return this.uniforms.minRadiusScale.value}setMinRadiusScale(e){this.uniforms.minRadiusScale.value=e}updateRadius(){let e=this.r*this.resolution.height;this.defines.RADIUS=e.toFixed(11),this.defines.RADIUS_SQ=(e*e).toFixed(11),this.needsUpdate=!0}get radius(){return this.r}set radius(e){this.r=Math.min(Math.max(e,1e-6),1),this.updateRadius()}getRadius(){return this.radius}setRadius(e){this.radius=e}get distanceScaling(){return!0}set distanceScaling(e){}isDistanceScalingEnabled(){return this.distanceScaling}setDistanceScalingEnabled(e){this.distanceScaling=e}get distanceThreshold(){return this.uniforms.distanceCutoff.value.x}set distanceThreshold(e){this.uniforms.distanceCutoff.value.set(Math.min(Math.max(e,0),1),Math.min(Math.max(e+this.distanceFalloff,0),1))}get worldDistanceThreshold(){var e,t;return-(e=this.distanceThreshold,e*((t=this.near)-this.far)-t)}set worldDistanceThreshold(e){this.distanceThreshold=t8(-e,this.near,this.far)}get distanceFalloff(){return this.uniforms.distanceCutoff.value.y-this.distanceThreshold}set distanceFalloff(e){this.uniforms.distanceCutoff.value.y=Math.min(Math.max(this.distanceThreshold+e,0),1)}get worldDistanceFalloff(){var e,t;return-(e=this.distanceFalloff,e*((t=this.near)-this.far)-t)}set worldDistanceFalloff(e){this.distanceFalloff=t8(-e,this.near,this.far)}setDistanceCutoff(e,t){this.uniforms.distanceCutoff.value.set(Math.min(Math.max(e,0),1),Math.min(Math.max(e+t,0),1))}get proximityThreshold(){return this.uniforms.proximityCutoff.value.x}set proximityThreshold(e){this.uniforms.proximityCutoff.value.set(Math.min(Math.max(e,0),1),Math.min(Math.max(e+this.proximityFalloff,0),1))}get worldProximityThreshold(){var e,t;return-(e=this.proximityThreshold,e*((t=this.near)-this.far)-t)}set worldProximityThreshold(e){this.proximityThreshold=t8(-e,this.near,this.far)}get proximityFalloff(){return this.uniforms.proximityCutoff.value.y-this.proximityThreshold}set proximityFalloff(e){this.uniforms.proximityCutoff.value.y=Math.min(Math.max(this.proximityThreshold+e,0),1)}get worldProximityFalloff(){var e,t;return-(e=this.proximityFalloff,e*((t=this.near)-this.far)-t)}set worldProximityFalloff(e){this.proximityFalloff=t8(-e,this.near,this.far)}setProximityCutoff(e,t){this.uniforms.proximityCutoff.value.set(Math.min(Math.max(e,0),1),Math.min(Math.max(e+t,0),1))}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNearFar.value.set(e.near,e.far),this.uniforms.projectionMatrix.value.copy(e.projectionMatrix),this.uniforms.inverseProjectionMatrix.value.copy(e.projectionMatrix).invert(),e instanceof eQ.PerspectiveCamera?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let r=this.uniforms,a=r.noiseTexture.value;null!==a&&r.noiseScale.value.set(e/a.image.width,t/a.image.height),r.texelSize.value.set(1/e,1/t),this.resolution.set(e,t),this.updateRadius()}},t7=`#include <packing>
|
|
643
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
644
|
+
uniform highp sampler2D depthBuffer;
|
|
645
|
+
#else
|
|
646
|
+
uniform mediump sampler2D depthBuffer;
|
|
647
|
+
#endif
|
|
648
|
+
#ifdef DOWNSAMPLE_NORMALS
|
|
649
|
+
uniform lowp sampler2D normalBuffer;
|
|
650
|
+
#endif
|
|
651
|
+
varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;float readDepth(const in vec2 uv){
|
|
652
|
+
#if DEPTH_PACKING == 3201
|
|
653
|
+
return unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
654
|
+
#else
|
|
655
|
+
return texture2D(depthBuffer,uv).r;
|
|
656
|
+
#endif
|
|
657
|
+
}int findBestDepth(const in float samples[4]){float c=(samples[0]+samples[1]+samples[2]+samples[3])*0.25;float distances[4];distances[0]=abs(c-samples[0]);distances[1]=abs(c-samples[1]);distances[2]=abs(c-samples[2]);distances[3]=abs(c-samples[3]);float maxDistance=max(max(distances[0],distances[1]),max(distances[2],distances[3]));int remaining[3];int rejected[3];int i,j,k;for(i=0,j=0,k=0;i<4;++i){if(distances[i]<maxDistance){remaining[j++]=i;}else{rejected[k++]=i;}}for(;j<3;++j){remaining[j]=rejected[--k];}vec3 s=vec3(samples[remaining[0]],samples[remaining[1]],samples[remaining[2]]);c=(s.x+s.y+s.z)/3.0;distances[0]=abs(c-s.x);distances[1]=abs(c-s.y);distances[2]=abs(c-s.z);float minDistance=min(distances[0],min(distances[1],distances[2]));for(i=0;i<3;++i){if(distances[i]==minDistance){break;}}return remaining[i];}void main(){float d[4];d[0]=readDepth(vUv0);d[1]=readDepth(vUv1);d[2]=readDepth(vUv2);d[3]=readDepth(vUv3);int index=findBestDepth(d);
|
|
658
|
+
#ifdef DOWNSAMPLE_NORMALS
|
|
659
|
+
vec3 n[4];n[0]=texture2D(normalBuffer,vUv0).rgb;n[1]=texture2D(normalBuffer,vUv1).rgb;n[2]=texture2D(normalBuffer,vUv2).rgb;n[3]=texture2D(normalBuffer,vUv3).rgb;
|
|
660
|
+
#else
|
|
661
|
+
vec3 n[4];n[0]=vec3(0.0);n[1]=vec3(0.0);n[2]=vec3(0.0);n[3]=vec3(0.0);
|
|
662
|
+
#endif
|
|
663
|
+
gl_FragColor=vec4(n[index],d[index]);}`,re=class extends eQ.ShaderMaterial{constructor(){super({name:"DepthDownsamplingMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new eQ.Uniform(null),normalBuffer:new eQ.Uniform(null),texelSize:new eQ.Uniform(new eQ.Vector2)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:t7,vertexShader:"uniform vec2 texelSize;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vUv0=uv;vUv1=vec2(uv.x,uv.y+texelSize.y);vUv2=vec2(uv.x+texelSize.x,uv.y);vUv3=uv+texelSize;gl_Position=vec4(position.xy,1.0,1.0);}"})}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.BasicDepthPacking){this.depthBuffer=e,this.depthPacking=t}set normalBuffer(e){this.uniforms.normalBuffer.value=e,null!==e?this.defines.DOWNSAMPLE_NORMALS="1":delete this.defines.DOWNSAMPLE_NORMALS,this.needsUpdate=!0}setNormalBuffer(e){this.normalBuffer=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},rt=class extends eW{constructor({normalBuffer:e=null,resolutionScale:t=.5,width:r=e8.AUTO_SIZE,height:a=e8.AUTO_SIZE,resolutionX:i=r,resolutionY:s=a}={}){super("DepthDownsamplingPass");const n=new re;n.normalBuffer=e,this.fullscreenMaterial=n,this.needsDepthTexture=!0,this.needsSwap=!1,this.renderTarget=new eQ.WebGLRenderTarget(1,1,{minFilter:eQ.NearestFilter,magFilter:eQ.NearestFilter,depthBuffer:!1,type:eQ.FloatType}),this.renderTarget.texture.name="DepthDownsamplingPass.Target",this.renderTarget.texture.generateMipmaps=!1;const o=this.resolution=new e8(this,i,s,t);o.addEventListener("change",e=>this.setSize(o.baseWidth,o.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}setDepthTexture(e,t=eQ.BasicDepthPacking){this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t}render(e,t,r,a,i){e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let r=this.resolution;r.setBaseSize(e,t),this.renderTarget.setSize(r.width,r.height),this.fullscreenMaterial.setSize(e,t)}initialize(e,t,r){let a=e.getContext();if(!(a.getExtension("EXT_color_buffer_float")||a.getExtension("EXT_color_buffer_half_float")))throw Error("Rendering to float texture is not supported.")}},rr=`uniform lowp sampler2D aoBuffer;uniform float luminanceInfluence;uniform float intensity;
|
|
664
|
+
#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH)
|
|
665
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
666
|
+
uniform highp sampler2D normalDepthBuffer;
|
|
667
|
+
#else
|
|
668
|
+
uniform mediump sampler2D normalDepthBuffer;
|
|
669
|
+
#endif
|
|
670
|
+
#endif
|
|
671
|
+
#ifdef COLORIZE
|
|
672
|
+
uniform vec3 color;
|
|
673
|
+
#endif
|
|
674
|
+
void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){float aoLinear=texture2D(aoBuffer,uv).r;
|
|
675
|
+
#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) && __VERSION__ == 300
|
|
676
|
+
vec4 normalDepth[4];normalDepth[0]=textureOffset(normalDepthBuffer,uv,ivec2(0,0));normalDepth[1]=textureOffset(normalDepthBuffer,uv,ivec2(0,1));normalDepth[2]=textureOffset(normalDepthBuffer,uv,ivec2(1,0));normalDepth[3]=textureOffset(normalDepthBuffer,uv,ivec2(1,1));float dot01=dot(normalDepth[0].rgb,normalDepth[1].rgb);float dot02=dot(normalDepth[0].rgb,normalDepth[2].rgb);float dot03=dot(normalDepth[0].rgb,normalDepth[3].rgb);float minDot=min(dot01,min(dot02,dot03));float s=step(THRESHOLD,minDot);float smallestDistance=1.0;int index;for(int i=0;i<4;++i){float distance=abs(depth-normalDepth[i].a);if(distance<smallestDistance){smallestDistance=distance;index=i;}}ivec2 offsets[4];offsets[0]=ivec2(0,0);offsets[1]=ivec2(0,1);offsets[2]=ivec2(1,0);offsets[3]=ivec2(1,1);ivec2 coord=ivec2(uv*vec2(textureSize(aoBuffer,0)))+offsets[index];float aoNearest=texelFetch(aoBuffer,coord,0).r;float ao=mix(aoNearest,aoLinear,s);
|
|
677
|
+
#else
|
|
678
|
+
float ao=aoLinear;
|
|
679
|
+
#endif
|
|
680
|
+
float l=luminance(inputColor.rgb);ao=mix(ao,0.0,l*luminanceInfluence);ao=clamp(ao*intensity,0.0,1.0);
|
|
681
|
+
#ifdef COLORIZE
|
|
682
|
+
outputColor=vec4(1.0-ao*(1.0-color),inputColor.a);
|
|
683
|
+
#else
|
|
684
|
+
outputColor=vec4(vec3(1.0-ao),inputColor.a);
|
|
685
|
+
#endif
|
|
686
|
+
}`,ra=`#ifdef TEXTURE_PRECISION_HIGH
|
|
687
|
+
uniform mediump sampler2D map;
|
|
688
|
+
#else
|
|
689
|
+
uniform lowp sampler2D map;
|
|
690
|
+
#endif
|
|
691
|
+
varying vec2 vUv2;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){
|
|
692
|
+
#ifdef UV_TRANSFORM
|
|
693
|
+
vec4 texel=texture2D(map,vUv2);
|
|
694
|
+
#else
|
|
695
|
+
vec4 texel=texture2D(map,uv);
|
|
696
|
+
#endif
|
|
697
|
+
outputColor=TEXEL;outputColor.a=max(inputColor.a,outputColor.a);}`,ri=`#ifdef ASPECT_CORRECTION
|
|
698
|
+
uniform float scale;
|
|
699
|
+
#else
|
|
700
|
+
uniform mat3 uvTransform;
|
|
701
|
+
#endif
|
|
702
|
+
varying vec2 vUv2;void mainSupport(const in vec2 uv){
|
|
703
|
+
#ifdef ASPECT_CORRECTION
|
|
704
|
+
vUv2=uv*vec2(aspect,1.0)*scale;
|
|
705
|
+
#else
|
|
706
|
+
vUv2=(uvTransform*vec3(uv,1.0)).xy;
|
|
707
|
+
#endif
|
|
708
|
+
}`,rs=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
709
|
+
uniform mediump sampler2D inputBuffer;
|
|
710
|
+
#else
|
|
711
|
+
uniform lowp sampler2D inputBuffer;
|
|
712
|
+
#endif
|
|
713
|
+
uniform vec4 maskParams;varying vec2 vUv;varying vec2 vUv2;varying vec2 vOffset;float linearGradientMask(const in float x){return smoothstep(maskParams.x,maskParams.y,x)-smoothstep(maskParams.w,maskParams.z,x);}void main(){vec2 dUv=vOffset*(1.0-linearGradientMask(vUv2.y));vec4 sum=texture2D(inputBuffer,vec2(vUv.x-dUv.x,vUv.y+dUv.y));sum+=texture2D(inputBuffer,vec2(vUv.x+dUv.x,vUv.y+dUv.y));sum+=texture2D(inputBuffer,vec2(vUv.x+dUv.x,vUv.y-dUv.y));sum+=texture2D(inputBuffer,vec2(vUv.x-dUv.x,vUv.y-dUv.y));gl_FragColor=sum*0.25;
|
|
714
|
+
#include <colorspace_fragment>
|
|
715
|
+
}`,rn=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
716
|
+
uniform mediump sampler2D map;
|
|
717
|
+
#else
|
|
718
|
+
uniform lowp sampler2D map;
|
|
719
|
+
#endif
|
|
720
|
+
uniform vec2 maskParams;varying vec2 vUv2;float linearGradientMask(const in float x){return step(maskParams.x,x)-step(maskParams.y,x);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){float mask=linearGradientMask(vUv2.y);vec4 texel=texture2D(map,uv);outputColor=mix(texel,inputColor,mask);}`,ro=`#include <packing>
|
|
721
|
+
#define packFloatToRGBA(v) packDepthToRGBA(v)
|
|
722
|
+
#define unpackRGBAToFloat(v) unpackRGBAToDepth(v)
|
|
723
|
+
uniform lowp sampler2D luminanceBuffer0;uniform lowp sampler2D luminanceBuffer1;uniform float minLuminance;uniform float deltaTime;uniform float tau;varying vec2 vUv;void main(){float l0=unpackRGBAToFloat(texture2D(luminanceBuffer0,vUv));
|
|
724
|
+
#if __VERSION__ < 300
|
|
725
|
+
float l1=texture2DLodEXT(luminanceBuffer1,vUv,MIP_LEVEL_1X1).r;
|
|
726
|
+
#else
|
|
727
|
+
float l1=textureLod(luminanceBuffer1,vUv,MIP_LEVEL_1X1).r;
|
|
728
|
+
#endif
|
|
729
|
+
l0=max(minLuminance,l0);l1=max(minLuminance,l1);float adaptedLum=l0+(l1-l0)*(1.0-exp(-deltaTime*tau));gl_FragColor=(adaptedLum==1.0)?vec4(1.0):packFloatToRGBA(adaptedLum);}`,rl=class extends eQ.ShaderMaterial{constructor(){super({name:"AdaptiveLuminanceMaterial",defines:{MIP_LEVEL_1X1:"0.0"},uniforms:{luminanceBuffer0:new eQ.Uniform(null),luminanceBuffer1:new eQ.Uniform(null),minLuminance:new eQ.Uniform(.01),deltaTime:new eQ.Uniform(0),tau:new eQ.Uniform(1)},extensions:{shaderTextureLOD:!0},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:ro,vertexShader:eX})}set luminanceBuffer0(e){this.uniforms.luminanceBuffer0.value=e}setLuminanceBuffer0(e){this.uniforms.luminanceBuffer0.value=e}set luminanceBuffer1(e){this.uniforms.luminanceBuffer1.value=e}setLuminanceBuffer1(e){this.uniforms.luminanceBuffer1.value=e}set mipLevel1x1(e){this.defines.MIP_LEVEL_1X1=e.toFixed(1),this.needsUpdate=!0}setMipLevel1x1(e){this.mipLevel1x1=e}set deltaTime(e){this.uniforms.deltaTime.value=e}setDeltaTime(e){this.uniforms.deltaTime.value=e}get minLuminance(){return this.uniforms.minLuminance.value}set minLuminance(e){this.uniforms.minLuminance.value=e}getMinLuminance(){return this.uniforms.minLuminance.value}setMinLuminance(e){this.uniforms.minLuminance.value=e}get adaptationRate(){return this.uniforms.tau.value}set adaptationRate(e){this.uniforms.tau.value=e}getAdaptationRate(){return this.uniforms.tau.value}setAdaptationRate(e){this.uniforms.tau.value=e}},rc=`#include <tonemapping_pars_fragment>
|
|
730
|
+
uniform float whitePoint;
|
|
731
|
+
#if TONE_MAPPING_MODE == 2 || TONE_MAPPING_MODE == 3
|
|
732
|
+
uniform float middleGrey;
|
|
733
|
+
#if TONE_MAPPING_MODE == 3
|
|
734
|
+
uniform lowp sampler2D luminanceBuffer;
|
|
735
|
+
#else
|
|
736
|
+
uniform float averageLuminance;
|
|
737
|
+
#endif
|
|
738
|
+
vec3 Reinhard2ToneMapping(vec3 color){color*=toneMappingExposure;float l=luminance(color);
|
|
739
|
+
#if TONE_MAPPING_MODE == 3
|
|
740
|
+
float lumAvg=unpackRGBAToFloat(texture2D(luminanceBuffer,vec2(0.5)));
|
|
741
|
+
#else
|
|
742
|
+
float lumAvg=averageLuminance;
|
|
743
|
+
#endif
|
|
744
|
+
float lumScaled=(l*middleGrey)/max(lumAvg,1e-6);float lumCompressed=lumScaled*(1.0+lumScaled/(whitePoint*whitePoint));lumCompressed/=(1.0+lumScaled);return clamp(lumCompressed*color,0.0,1.0);}
|
|
745
|
+
#elif TONE_MAPPING_MODE == 4
|
|
746
|
+
#define A 0.15
|
|
747
|
+
#define B 0.50
|
|
748
|
+
#define C 0.10
|
|
749
|
+
#define D 0.20
|
|
750
|
+
#define E 0.02
|
|
751
|
+
#define F 0.30
|
|
752
|
+
vec3 Uncharted2Helper(const in vec3 x){return((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;}vec3 Uncharted2ToneMapping(vec3 color){color*=toneMappingExposure;return clamp(Uncharted2Helper(color)/Uncharted2Helper(vec3(whitePoint)),0.0,1.0);}
|
|
753
|
+
#endif
|
|
754
|
+
void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){
|
|
755
|
+
#if TONE_MAPPING_MODE == 2 || TONE_MAPPING_MODE == 3
|
|
756
|
+
outputColor=vec4(Reinhard2ToneMapping(inputColor.rgb),inputColor.a);
|
|
757
|
+
#elif TONE_MAPPING_MODE == 4
|
|
758
|
+
outputColor=vec4(Uncharted2ToneMapping(inputColor.rgb),inputColor.a);
|
|
759
|
+
#else
|
|
760
|
+
outputColor=vec4(toneMapping(inputColor.rgb),inputColor.a);
|
|
761
|
+
#endif
|
|
762
|
+
}`,ru=`uniform float offset;uniform float darkness;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){const vec2 center=vec2(0.5);vec3 color=inputColor.rgb;
|
|
763
|
+
#if VIGNETTE_TECHNIQUE == 0
|
|
764
|
+
float d=distance(uv,center);color*=smoothstep(0.8,offset*0.799,d*(darkness+offset));
|
|
765
|
+
#else
|
|
766
|
+
vec2 coord=(uv-center)*vec2(offset);color=mix(color,vec3(1.0-darkness),dot(coord,coord));
|
|
767
|
+
#endif
|
|
768
|
+
outputColor=vec4(color,inputColor.a);}`,rf=class extends tt{constructor({blendFunction:e,eskil:t=!1,technique:r=1*!!t,offset:a=.5,darkness:i=.5}={}){super("VignetteEffect",ru,{blendFunction:e,defines:new Map([["VIGNETTE_TECHNIQUE",r.toFixed(0)]]),uniforms:new Map([["offset",new eQ.Uniform(a)],["darkness",new eQ.Uniform(i)]])})}get technique(){return Number(this.defines.get("VIGNETTE_TECHNIQUE"))}set technique(e){this.technique!==e&&(this.defines.set("VIGNETTE_TECHNIQUE",e.toFixed(0)),this.setChanged())}get eskil(){return 1===this.technique}set eskil(e){this.technique=1*!!e}getTechnique(){return this.technique}setTechnique(e){this.technique=e}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}get darkness(){return this.uniforms.get("darkness").value}set darkness(e){this.uniforms.get("darkness").value=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e}};eQ.Loader,eQ.Loader,eQ.Loader;eQ.ShaderMaterial;var rd=`#include <packing>
|
|
769
|
+
varying vec2 vUv;
|
|
770
|
+
#ifdef NORMAL_DEPTH
|
|
771
|
+
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
772
|
+
uniform highp sampler2D normalDepthBuffer;
|
|
773
|
+
#else
|
|
774
|
+
uniform mediump sampler2D normalDepthBuffer;
|
|
775
|
+
#endif
|
|
776
|
+
float readDepth(const in vec2 uv){return texture2D(normalDepthBuffer,uv).a;}
|
|
777
|
+
#else
|
|
778
|
+
#if INPUT_DEPTH_PACKING == 3201
|
|
779
|
+
uniform lowp sampler2D depthBuffer;
|
|
780
|
+
#elif defined(GL_FRAGMENT_PRECISION_HIGH)
|
|
781
|
+
uniform highp sampler2D depthBuffer;
|
|
782
|
+
#else
|
|
783
|
+
uniform mediump sampler2D depthBuffer;
|
|
784
|
+
#endif
|
|
785
|
+
float readDepth(const in vec2 uv){
|
|
786
|
+
#if INPUT_DEPTH_PACKING == 3201
|
|
787
|
+
return unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
788
|
+
#else
|
|
789
|
+
return texture2D(depthBuffer,uv).r;
|
|
790
|
+
#endif
|
|
791
|
+
}
|
|
792
|
+
#endif
|
|
793
|
+
void main(){
|
|
794
|
+
#if INPUT_DEPTH_PACKING == OUTPUT_DEPTH_PACKING
|
|
795
|
+
gl_FragColor=texture2D(depthBuffer,vUv);
|
|
796
|
+
#else
|
|
797
|
+
float depth=readDepth(vUv);
|
|
798
|
+
#if OUTPUT_DEPTH_PACKING == 3201
|
|
799
|
+
gl_FragColor=(depth==1.0)?vec4(1.0):packDepthToRGBA(depth);
|
|
800
|
+
#else
|
|
801
|
+
gl_FragColor=vec4(vec3(depth),1.0);
|
|
802
|
+
#endif
|
|
803
|
+
#endif
|
|
804
|
+
}`,rh=`varying vec2 vUv;
|
|
805
|
+
#if DEPTH_COPY_MODE == 1
|
|
806
|
+
uniform vec2 texelPosition;
|
|
807
|
+
#endif
|
|
808
|
+
void main(){
|
|
809
|
+
#if DEPTH_COPY_MODE == 1
|
|
810
|
+
vUv=texelPosition;
|
|
811
|
+
#else
|
|
812
|
+
vUv=position.xy*0.5+0.5;
|
|
813
|
+
#endif
|
|
814
|
+
gl_Position=vec4(position.xy,1.0,1.0);}`,rp=class extends eQ.ShaderMaterial{constructor(){super({name:"DepthCopyMaterial",defines:{INPUT_DEPTH_PACKING:"0",OUTPUT_DEPTH_PACKING:"0",DEPTH_COPY_MODE:"0"},uniforms:{depthBuffer:new eQ.Uniform(null),texelPosition:new eQ.Uniform(new eQ.Vector2)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:rd,vertexShader:rh}),this.depthCopyMode=0}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set inputDepthPacking(e){this.defines.INPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get outputDepthPacking(){return Number(this.defines.OUTPUT_DEPTH_PACKING)}set outputDepthPacking(e){this.defines.OUTPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.BasicDepthPacking){this.depthBuffer=e,this.inputDepthPacking=t}getInputDepthPacking(){return Number(this.defines.INPUT_DEPTH_PACKING)}setInputDepthPacking(e){this.defines.INPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}getOutputDepthPacking(){return Number(this.defines.OUTPUT_DEPTH_PACKING)}setOutputDepthPacking(e){this.defines.OUTPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get texelPosition(){return this.uniforms.texelPosition.value}getTexelPosition(){return this.uniforms.texelPosition.value}setTexelPosition(e){this.uniforms.texelPosition.value=e}get mode(){return this.depthCopyMode}set mode(e){this.depthCopyMode=e,this.defines.DEPTH_COPY_MODE=e.toFixed(0),this.needsUpdate=!0}getMode(){return this.mode}setMode(e){this.mode=e}},rm=`#include <common>
|
|
815
|
+
#include <packing>
|
|
816
|
+
#include <dithering_pars_fragment>
|
|
817
|
+
#define packFloatToRGBA(v) packDepthToRGBA(v)
|
|
818
|
+
#define unpackRGBAToFloat(v) unpackRGBAToDepth(v)
|
|
819
|
+
#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
820
|
+
uniform mediump sampler2D inputBuffer;
|
|
821
|
+
#else
|
|
822
|
+
uniform lowp sampler2D inputBuffer;
|
|
823
|
+
#endif
|
|
824
|
+
#if DEPTH_PACKING == 3201
|
|
825
|
+
uniform lowp sampler2D depthBuffer;
|
|
826
|
+
#elif defined(GL_FRAGMENT_PRECISION_HIGH)
|
|
827
|
+
uniform highp sampler2D depthBuffer;
|
|
828
|
+
#else
|
|
829
|
+
uniform mediump sampler2D depthBuffer;
|
|
830
|
+
#endif
|
|
831
|
+
uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);}float readDepth(const in vec2 uv){
|
|
832
|
+
#if DEPTH_PACKING == 3201
|
|
833
|
+
float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv));
|
|
834
|
+
#else
|
|
835
|
+
float depth=texture2D(depthBuffer,uv).r;
|
|
836
|
+
#endif
|
|
837
|
+
#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH)
|
|
838
|
+
float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d;
|
|
839
|
+
#elif defined(USE_REVERSED_DEPTH_BUFFER)
|
|
840
|
+
depth=1.0-depth;
|
|
841
|
+
#endif
|
|
842
|
+
return depth;}float getViewZ(const in float depth){
|
|
843
|
+
#ifdef PERSPECTIVE_CAMERA
|
|
844
|
+
return perspectiveDepthToViewZ(depth,cameraNear,cameraFar);
|
|
845
|
+
#else
|
|
846
|
+
return orthographicDepthToViewZ(depth,cameraNear,cameraFar);
|
|
847
|
+
#endif
|
|
848
|
+
}vec3 RGBToHCV(const in vec3 RGB){vec4 P=mix(vec4(RGB.bg,-1.0,2.0/3.0),vec4(RGB.gb,0.0,-1.0/3.0),step(RGB.b,RGB.g));vec4 Q=mix(vec4(P.xyw,RGB.r),vec4(RGB.r,P.yzx),step(P.x,RGB.r));float C=Q.x-min(Q.w,Q.y);float H=abs((Q.w-Q.y)/(6.0*C+EPSILON)+Q.z);return vec3(H,C,Q.x);}vec3 RGBToHSL(const in vec3 RGB){vec3 HCV=RGBToHCV(RGB);float L=HCV.z-HCV.y*0.5;float S=HCV.y/(1.0-abs(L*2.0-1.0)+EPSILON);return vec3(HCV.x,S,L);}vec3 HueToRGB(const in float H){float R=abs(H*6.0-3.0)-1.0;float G=2.0-abs(H*6.0-2.0);float B=2.0-abs(H*6.0-4.0);return clamp(vec3(R,G,B),0.0,1.0);}vec3 HSLToRGB(const in vec3 HSL){vec3 RGB=HueToRGB(HSL.x);float C=(1.0-abs(2.0*HSL.z-1.0))*HSL.y;return(RGB-0.5)*C+HSL.z;}FRAGMENT_HEAD void main(){FRAGMENT_MAIN_UV vec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGE color0.a=clamp(color0.a,0.0,1.0);gl_FragColor=color0;
|
|
849
|
+
#ifdef ENCODE_OUTPUT
|
|
850
|
+
#include <colorspace_fragment>
|
|
851
|
+
#endif
|
|
852
|
+
#include <dithering_fragment>
|
|
853
|
+
}`,rg=class extends eQ.ShaderMaterial{constructor(e,t,r,a,i=!1){super({name:"EffectMaterial",defines:{THREE_REVISION:eQ.REVISION.replace(/\D+/g,""),DEPTH_PACKING:"0",ENCODE_OUTPUT:"1"},uniforms:{inputBuffer:new eQ.Uniform(null),depthBuffer:new eQ.Uniform(null),resolution:new eQ.Uniform(new eQ.Vector2),texelSize:new eQ.Uniform(new eQ.Vector2),cameraNear:new eQ.Uniform(.3),cameraFar:new eQ.Uniform(1e3),aspect:new eQ.Uniform(1),time:new eQ.Uniform(0)},blending:eQ.NoBlending,toneMapped:!1,depthWrite:!1,depthTest:!1,dithering:i}),e&&this.setShaderParts(e),t&&this.setDefines(t),r&&this.setUniforms(r),this.copyCameraSettings(a)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=eQ.BasicDepthPacking){this.depthBuffer=e,this.depthPacking=t}setShaderData(e){this.setShaderParts(e.shaderParts),this.setDefines(e.defines),this.setUniforms(e.uniforms),this.setExtensions(e.extensions)}setShaderParts(e){return this.fragmentShader=rm.replace(e1.FRAGMENT_HEAD,e.get(e1.FRAGMENT_HEAD)||"").replace(e1.FRAGMENT_MAIN_UV,e.get(e1.FRAGMENT_MAIN_UV)||"").replace(e1.FRAGMENT_MAIN_IMAGE,e.get(e1.FRAGMENT_MAIN_IMAGE)||""),this.vertexShader="uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEAD void main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORT gl_Position=vec4(position.xy,1.0,1.0);}".replace(e1.VERTEX_HEAD,e.get(e1.VERTEX_HEAD)||"").replace(e1.VERTEX_MAIN_SUPPORT,e.get(e1.VERTEX_MAIN_SUPPORT)||""),this.needsUpdate=!0,this}setDefines(e){for(let t of e.entries())this.defines[t[0]]=t[1];return this.needsUpdate=!0,this}setUniforms(e){for(let t of e.entries())this.uniforms[t[0]]=t[1];return this}setExtensions(e){for(let t of(this.extensions={},e))this.extensions[t]=!0;return this}get encodeOutput(){return void 0!==this.defines.ENCODE_OUTPUT}set encodeOutput(e){this.encodeOutput!==e&&(e?this.defines.ENCODE_OUTPUT="1":delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(e){return this.encodeOutput}setOutputEncodingEnabled(e){this.encodeOutput=e}get time(){return this.uniforms.time.value}set time(e){this.uniforms.time.value=e}setDeltaTime(e){this.uniforms.time.value+=e}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof eQ.PerspectiveCamera?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let r=this.uniforms;r.resolution.value.set(e,t),r.texelSize.value.set(1/e,1/t),r.aspect.value=e/t}static get Section(){return e1}};eQ.ShaderMaterial;var rv=Number(eQ.REVISION.replace(/\D+/g,"")),rx=255/256,rA=new Float32Array([255/256/0x1000000,255/256/65536,255/256/256,255/256]),rD=new Float32Array([rx,rx/256,rx/65536,1/0x1000000]);function rw(e,t,r){for(let a of t){let t="$1"+e+a.charAt(0).toUpperCase()+a.slice(1),i=RegExp("([^\\.])(\\b"+a+"\\b)","g");for(let e of r.entries())null!==e[1]&&r.set(e[0],e[1].replace(i,t))}}var rS=class extends eW{constructor(e,...t){super("EffectPass"),this.fullscreenMaterial=new rg(null,null,null,e),this.listener=e=>this.handleEvent(e),this.effects=[],this.setEffects(t),this.skipRendering=!1,this.minTime=1,this.maxTime=1/0,this.timeScale=1}set mainScene(e){for(let t of this.effects)t.mainScene=e}set mainCamera(e){for(let t of(this.fullscreenMaterial.copyCameraSettings(e),this.effects))t.mainCamera=e}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(e){this.fullscreenMaterial.encodeOutput=e}get dithering(){return this.fullscreenMaterial.dithering}set dithering(e){let t=this.fullscreenMaterial;t.dithering=e,t.needsUpdate=!0}setEffects(e){for(let e of this.effects)e.removeEventListener("change",this.listener);for(let t of(this.effects=e.sort((e,t)=>t.attributes-e.attributes),this.effects))t.addEventListener("change",this.listener)}updateMaterial(){let e=new e4,t=0;for(let r of this.effects)if(9===r.blendMode.blendFunction)e.attributes|=1&r.getAttributes();else if((e.attributes&r.getAttributes()&2)!=0)throw Error(`Convolution effects cannot be merged (${r.name})`);else!function(e,t,r){let a=t.getFragmentShader(),i=t.getVertexShader(),s=void 0!==a&&/mainImage/.test(a),n=void 0!==a&&/mainUv/.test(a);if(r.attributes|=t.getAttributes(),void 0===a)throw Error(`Missing fragment shader (${t.name})`);if(n&&(2&r.attributes)!=0)throw Error(`Effects that transform UVs are incompatible with convolution effects (${t.name})`);if(s||n){let o=/\w+\s+(\w+)\([\w\s,]*\)\s*{/g,l=r.shaderParts,c=l.get(e1.FRAGMENT_HEAD)||"",u=l.get(e1.FRAGMENT_MAIN_UV)||"",f=l.get(e1.FRAGMENT_MAIN_IMAGE)||"",d=l.get(e1.VERTEX_HEAD)||"",h=l.get(e1.VERTEX_MAIN_SUPPORT)||"",p=new Set,m=new Set;if(n&&(u+=` ${e}MainUv(UV);
|
|
854
|
+
`,r.uvTransformation=!0),null!==i&&/mainSupport/.test(i)){let t=/mainSupport *\([\w\s]*?uv\s*?\)/.test(i);for(let a of(h+=` ${e}MainSupport(`,h+=t?"vUv);\n":");\n",i.matchAll(/(?:varying\s+\w+\s+([\S\s]*?);)/g)))for(let e of a[1].split(/\s*,\s*/))r.varyings.add(e),p.add(e),m.add(e);for(let e of i.matchAll(o))m.add(e[1])}for(let e of a.matchAll(o))m.add(e[1]);for(let e of t.defines.keys())m.add(e.replace(/\([\w\s,]*\)/g,""));for(let e of t.uniforms.keys())m.add(e);m.delete("while"),m.delete("for"),m.delete("if"),t.uniforms.forEach((t,a)=>r.uniforms.set(e+a.charAt(0).toUpperCase()+a.slice(1),t)),t.defines.forEach((t,a)=>r.defines.set(e+a.charAt(0).toUpperCase()+a.slice(1),t));let g=new Map([["fragment",a],["vertex",i]]);rw(e,m,r.defines),rw(e,m,g),a=g.get("fragment"),i=g.get("vertex");let v=t.blendMode;if(r.blendModes.set(v.blendFunction,v),s){null!==t.inputColorSpace&&t.inputColorSpace!==r.colorSpace&&(f+=t.inputColorSpace===eQ.SRGBColorSpace?"color0 = sRGBTransferOETF(color0);\n ":"color0 = sRGBToLinear(color0);\n "),t.outputColorSpace!==eQ.NoColorSpace?r.colorSpace=t.outputColorSpace:null!==t.inputColorSpace&&(r.colorSpace=t.inputColorSpace),f+=`${e}MainImage(color0, UV, `,(1&r.attributes)!=0&&/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/.test(a)&&(f+="depth, ",r.readDepth=!0),f+="color1);\n ";let i=e+"BlendOpacity";r.uniforms.set(i,v.opacity),f+=`color0 = blend${v.blendFunction}(color0, color1, ${i});
|
|
855
|
+
|
|
856
|
+
`,c+=`uniform float ${i};
|
|
857
|
+
|
|
858
|
+
`}if(c+=a+"\n",null!==i&&(d+=i+"\n"),l.set(e1.FRAGMENT_HEAD,c),l.set(e1.FRAGMENT_MAIN_UV,u),l.set(e1.FRAGMENT_MAIN_IMAGE,f),l.set(e1.VERTEX_HEAD,d),l.set(e1.VERTEX_MAIN_SUPPORT,h),null!==t.extensions)for(let e of t.extensions)r.extensions.add(e)}else throw Error(`Could not find mainImage or mainUv function (${t.name})`)}("e"+t++,r,e);let r=e.shaderParts.get(e1.FRAGMENT_HEAD),a=e.shaderParts.get(e1.FRAGMENT_MAIN_IMAGE),i=e.shaderParts.get(e1.FRAGMENT_MAIN_UV),s=/\bblend\b/g;for(let t of e.blendModes.values())r+=t.getShaderCode().replace(s,`blend${t.blendFunction}`)+"\n";for(let[t,s]of((1&e.attributes)!=0?(e.readDepth&&(a="float depth = readDepth(UV);\n\n "+a),this.needsDepthTexture=null===this.getDepthTexture()):this.needsDepthTexture=!1,e.colorSpace===eQ.SRGBColorSpace&&(a+="color0 = sRGBToLinear(color0);\n "),e.uvTransformation?(i="vec2 transformedUv = vUv;\n"+i,e.defines.set("UV","transformedUv")):e.defines.set("UV","vUv"),e.shaderParts.set(e1.FRAGMENT_HEAD,r),e.shaderParts.set(e1.FRAGMENT_MAIN_IMAGE,a),e.shaderParts.set(e1.FRAGMENT_MAIN_UV,i),e.shaderParts))null!==s&&e.shaderParts.set(t,s.trim().replace(/^#/,"\n#"));this.skipRendering=0===t,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderData(e)}recompile(){this.updateMaterial()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(e,t=eQ.BasicDepthPacking){for(let r of(this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t,this.effects))r.setDepthTexture(e,t)}render(e,t,r,a,i){for(let r of this.effects)r.update(e,t,a);if(!this.skipRendering||this.renderToScreen){let i=this.fullscreenMaterial;i.inputBuffer=t.texture,i.time+=a*this.timeScale,e.setRenderTarget(this.renderToScreen?null:r),e.render(this.scene,this.camera)}}setSize(e,t){for(let r of(this.fullscreenMaterial.setSize(e,t),this.effects))r.setSize(e,t)}initialize(e,t,r){for(let a of(this.renderer=e,this.effects))a.initialize(e,t,r);this.updateMaterial(),void 0!==r&&r!==eQ.UnsignedByteType&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}dispose(){for(let e of(super.dispose(),this.effects))e.removeEventListener("change",this.listener),e.dispose()}handleEvent(e){"change"===e.type&&this.recompile()}},ry=class extends eW{constructor(e,t,{renderTarget:r,resolutionScale:a=1,width:i=e8.AUTO_SIZE,height:s=e8.AUTO_SIZE,resolutionX:n=i,resolutionY:o=s}={}){super("NormalPass"),this.needsSwap=!1,this.renderPass=new tR(e,t,new eQ.MeshNormalMaterial);const l=this.renderPass;l.ignoreBackground=!0,l.skipShadowMapUpdate=!0;const c=l.getClearPass();c.overrideClearColor=new eQ.Color(7829503),c.overrideClearAlpha=1,this.renderTarget=r,void 0===this.renderTarget&&(this.renderTarget=new eQ.WebGLRenderTarget(1,1,{minFilter:eQ.NearestFilter,magFilter:eQ.NearestFilter}),this.renderTarget.texture.name="NormalPass.Target");const u=this.resolution=new e8(this,n,o,a);u.addEventListener("change",e=>this.setSize(u.baseWidth,u.baseHeight))}set mainScene(e){this.renderPass.mainScene=e}set mainCamera(e){this.renderPass.mainCamera=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,r,a,i){let s=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,s,s)}setSize(e,t){let r=this.resolution;r.setBaseSize(e,t),this.renderTarget.setSize(r.width,r.height)}};function rT(e,t,r,a){var i;return(i=e+(t-e)*.75)+(r+(a-r)*.75-i)*.875}function rC(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),rT(0,0,0,0),new Float32Array([0,0,0,0]),rT(0,0,0,1),new Float32Array([0,0,0,1]),rT(0,0,1,0),new Float32Array([0,0,1,0]),rT(0,0,1,1),new Float32Array([0,0,1,1]),rT(0,1,0,0),new Float32Array([0,1,0,0]),rT(0,1,0,1),new Float32Array([0,1,0,1]),rT(0,1,1,0),new Float32Array([0,1,1,0]),rT(0,1,1,1),new Float32Array([0,1,1,1]),rT(1,0,0,0),new Float32Array([1,0,0,0]),rT(1,0,0,1),new Float32Array([1,0,0,1]),rT(1,0,1,0),new Float32Array([1,0,1,0]),rT(1,0,1,1),new Float32Array([1,0,1,1]),rT(1,1,0,0),new Float32Array([1,1,0,0]),rT(1,1,0,1),new Float32Array([1,1,0,1]),rT(1,1,1,0),new Float32Array([1,1,1,0]),rT(1,1,1,1),new Float32Array([1,1,1,1]);function rB(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function rE(e,t){if(e){if("string"==typeof e)return rB(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return rB(e,t)}}function rM(e){return function(e){if(Array.isArray(e))return rB(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||rE(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}new O.Vector2,new O.Vector2;function rb(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}var rI=function e(t,r,a){var i=this;rb(this,e),rC(this,"dot2",function(e,t){return i.x*e+i.y*t}),rC(this,"dot3",function(e,t,r){return i.x*e+i.y*t+i.z*r}),this.x=t,this.y=r,this.z=a},rP=[new rI(1,1,0),new rI(-1,1,0),new rI(1,-1,0),new rI(-1,-1,0),new rI(1,0,1),new rI(-1,0,1),new rI(1,0,-1),new rI(-1,0,-1),new rI(0,1,1),new rI(0,-1,1),new rI(0,1,-1),new rI(0,-1,-1)],rR=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],rF=Array(512),rU=Array(512),rL=0;(rL=Math.floor(rL))<256&&(rL|=rL<<8);for(var rG,rO=0;rO<256;rO++)rG=1&rO?rR[rO]^255&rL:rR[rO]^rL>>8&255,rF[rO]=rF[rO+256]=rG,rU[rO]=rU[rO+256]=rP[rG%12];function rN(e){var t=function(e){if("number"==typeof e)e=Math.abs(e);else if("string"==typeof e){var t=e;e=0;for(var r=0;r<t.length;r++)e=(e+(r+1)*(t.charCodeAt(r)%96))%0x7fffffff}return 0===e&&(e=311),e}(e);return function(){var e=48271*t%0x7fffffff;return t=e,e/0x7fffffff}}new function e(t){var r=this;rb(this,e),rC(this,"seed",0),rC(this,"init",function(e){r.seed=e,r.value=rN(e)}),rC(this,"value",rN(this.seed)),this.init(t)}(Math.random());var rH=function(e){return 1/(1+e+.48*e*e+.235*e*e*e)};function rz(e,t,r){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.25,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.01,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1/0,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:rH,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:.001,l="velocity_"+t;if(void 0===e.__damp&&(e.__damp={}),void 0===e.__damp[l]&&(e.__damp[l]=0),Math.abs(e[t]-r)<=o)return e[t]=r,!1;var c=2/(a=Math.max(1e-4,a)),u=n(c*i),f=e[t]-r,d=r,h=s*a;f=Math.min(Math.max(f,-h),h),r=e[t]-f;var p=(e.__damp[l]+c*f)*i;e.__damp[l]=(e.__damp[l]-c*p)*u;var m=r+(f+p)*u;return d-e[t]>0==m>d&&(m=d,e.__damp[l]=(m-d)/i),e[t]=m,!0}function rk(e,t,r,a,i,s,n,o){var l,c,u,f;return rz(e,t,e[t]+(u=(l=r-e[t])-Math.floor(l/(c=2*Math.PI))*c,(f=Math.max(0,Math.min(c,u)))>Math.PI&&(f-=2*Math.PI),f),a,i,s,n,o)}var rj=new O.Vector2,rQ=new O.Vector3;function rV(e,t,r,a,i,s,n){return"number"==typeof t?rQ.setScalar(t):Array.isArray(t)?rQ.set(t[0],t[1],t[2]):rQ.copy(t),o=rz(e,"x",rQ.x,r,a,i,s,n),l=rz(e,"y",rQ.y,r,a,i,s,n),c=rz(e,"z",rQ.z,r,a,i,s,n),o||l||c}var rW=new O.Vector4,rY=new O.Euler,rK=new O.Color,rX=new O.Quaternion,rZ=new O.Vector4,rJ=new O.Vector4,rq=new O.Vector4;function r_(e,t,r,a,i,s,n){Array.isArray(t)?rX.set(t[0],t[1],t[2],t[3]):rX.copy(t);var o=e.dot(rX)>0?1:-1;return rX.x*=o,rX.y*=o,rX.z*=o,rX.w*=o,D=rz(e,"x",rX.x,r,a,i,s,n),w=rz(e,"y",rX.y,r,a,i,s,n),S=rz(e,"z",rX.z,r,a,i,s,n),y=rz(e,"w",rX.w,r,a,i,s,n),rZ.set(e.x,e.y,e.z,e.w).normalize(),rJ.set(e.__damp.velocity_x,e.__damp.velocity_y,e.__damp.velocity_z,e.__damp.velocity_w),rq.copy(rZ).multiplyScalar(rJ.dot(rZ)/rZ.dot(rZ)),e.__damp.velocity_x-=rq.x,e.__damp.velocity_y-=rq.y,e.__damp.velocity_z-=rq.z,e.__damp.velocity_w-=rq.w,e.set(rZ.x,rZ.y,rZ.z,rZ.w),D||w||S||y}var r$=new O.Spherical,r0=new O.Matrix4,r2=new O.Vector3,r1=new O.Quaternion,r4=new O.Vector3,r5=Object.freeze({__proto__:null,rsqw:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.01,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/(2*Math.PI);return r/Math.atan(1/t)*Math.atan(Math.sin(2*Math.PI*e*a)/t)},exp:rH,damp:rz,dampAngle:rk,damp2:function(e,t,r,a,i,o,l){return"number"==typeof t?rj.setScalar(t):Array.isArray(t)?rj.set(t[0],t[1]):rj.copy(t),s=rz(e,"x",rj.x,r,a,i,o,l),n=rz(e,"y",rj.y,r,a,i,o,l),s||n},damp3:rV,damp4:function(e,t,r,a,i,s,n){return"number"==typeof t?rW.setScalar(t):Array.isArray(t)?rW.set(t[0],t[1],t[2],t[3]):rW.copy(t),u=rz(e,"x",rW.x,r,a,i,s,n),f=rz(e,"y",rW.y,r,a,i,s,n),d=rz(e,"z",rW.z,r,a,i,s,n),h=rz(e,"w",rW.w,r,a,i,s,n),u||f||d||h},dampE:function(e,t,r,a,i,s,n){return Array.isArray(t)?rY.set(t[0],t[1],t[2],t[3]):rY.copy(t),p=rk(e,"x",rY.x,r,a,i,s,n),m=rk(e,"y",rY.y,r,a,i,s,n),g=rk(e,"z",rY.z,r,a,i,s,n),p||m||g},dampC:function(e,t,r,a,i,s,n){return t instanceof O.Color?rK.copy(t):Array.isArray(t)?rK.setRGB(t[0],t[1],t[2]):rK.set(t),v=rz(e,"r",rK.r,r,a,i,s,n),x=rz(e,"g",rK.g,r,a,i,s,n),A=rz(e,"b",rK.b,r,a,i,s,n),v||x||A},dampQ:r_,dampS:function(e,t,r,a,i,s,n){return Array.isArray(t)?r$.set(t[0],t[1],t[2]):r$.copy(t),T=rz(e,"radius",r$.radius,r,a,i,s,n),C=rk(e,"phi",r$.phi,r,a,i,s,n),B=rk(e,"theta",r$.theta,r,a,i,s,n),T||C||B},dampM:function(e,t,r,a,i,s,n){return void 0===e.__damp&&(e.__damp={position:new O.Vector3,rotation:new O.Quaternion,scale:new O.Vector3},e.decompose(e.__damp.position,e.__damp.rotation,e.__damp.scale)),Array.isArray(t)?r0.set.apply(r0,rM(t)):r0.copy(t),r0.decompose(r2,r1,r4),E=rV(e.__damp.position,r2,r,a,i,s,n),M=r_(e.__damp.rotation,r1,r,a,i,s,n),b=rV(e.__damp.scale,r4,r,a,i,s,n),e.compose(e.__damp.position,e.__damp.rotation,e.__damp.scale),E||M||b}});O.BufferGeometry;var r3=O,r8=O;new r8.OrthographicCamera(-1,1,1,-1,0,1);class r6 extends r8.BufferGeometry{constructor(){super(),this.setAttribute("position",new r8.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new r8.Float32BufferAttribute([0,2,0,0,2,0],2))}}new r6;class r9 extends r3.BufferGeometry{boundingSphere=new r3.Sphere;constructor(){super(),this.setAttribute("position",new r3.BufferAttribute(new Float32Array([-1,-1,3,-1,-1,3]),2)),this.setAttribute("uv",new r3.BufferAttribute(new Float32Array([0,0,2,0,0,2]),2))}computeBoundingSphere(){}}let r7=new r9,ae=new r3.OrthographicCamera;class at{constructor(e){this._mesh=new r3.Mesh(r7,e),this._mesh.frustumCulled=!1}render(e){e.render(this._mesh,ae)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}dispose(){this._mesh.material.dispose(),this._mesh.geometry.dispose()}}let ar={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},sceneNormal:{value:null},projMat:{value:new r3.Matrix4},viewMat:{value:new r3.Matrix4},projViewMat:{value:new r3.Matrix4},projectionMatrixInv:{value:new r3.Matrix4},viewMatrixInv:{value:new r3.Matrix4},cameraPos:{value:new r3.Vector3},resolution:{value:new r3.Vector2},biasAdjustment:{value:new r3.Vector2},time:{value:0},samples:{value:[]},bluenoise:{value:null},distanceFalloff:{value:1},radius:{value:5},near:{value:.1},far:{value:1e3},ortho:{value:!1},screenSpaceRadius:{value:!1},frame:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
859
|
+
varying vec2 vUv;
|
|
860
|
+
void main() {
|
|
861
|
+
vUv = uv;
|
|
862
|
+
gl_Position = vec4(position, 1);
|
|
863
|
+
}`,fragmentShader:`
|
|
864
|
+
#define SAMPLES 16
|
|
865
|
+
#define FSAMPLES 16.0
|
|
866
|
+
uniform sampler2D sceneDiffuse;
|
|
867
|
+
uniform highp sampler2D sceneNormal;
|
|
868
|
+
uniform highp sampler2D sceneDepth;
|
|
869
|
+
uniform mat4 projectionMatrixInv;
|
|
870
|
+
uniform mat4 viewMatrixInv;
|
|
871
|
+
uniform mat4 projMat;
|
|
872
|
+
uniform mat4 viewMat;
|
|
873
|
+
uniform mat4 projViewMat;
|
|
874
|
+
uniform vec3 cameraPos;
|
|
875
|
+
uniform vec2 resolution;
|
|
876
|
+
uniform vec2 biasAdjustment;
|
|
877
|
+
uniform float time;
|
|
878
|
+
uniform vec3[SAMPLES] samples;
|
|
879
|
+
uniform float radius;
|
|
880
|
+
uniform float distanceFalloff;
|
|
881
|
+
uniform float near;
|
|
882
|
+
uniform float far;
|
|
883
|
+
uniform float frame;
|
|
884
|
+
uniform bool ortho;
|
|
885
|
+
uniform bool screenSpaceRadius;
|
|
886
|
+
uniform sampler2D bluenoise;
|
|
887
|
+
varying vec2 vUv;
|
|
888
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
889
|
+
{
|
|
890
|
+
return (zFar * zNear) / (zFar - d * (zFar - zNear));
|
|
891
|
+
}
|
|
892
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
893
|
+
return nearZ + (farZ - nearZ) * d;
|
|
894
|
+
}
|
|
895
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
896
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
897
|
+
float a = farZ / (farZ - nearZ);
|
|
898
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
899
|
+
float linDepth = a + b / depth;
|
|
900
|
+
/*return ortho ? linearize_depth_ortho(
|
|
901
|
+
linDepth,
|
|
902
|
+
nearZ,
|
|
903
|
+
farZ
|
|
904
|
+
) :linearize_depth(linDepth, nearZ, farZ);*/
|
|
905
|
+
#ifdef ORTHO
|
|
906
|
+
|
|
907
|
+
return linearize_depth_ortho(d, nearZ, farZ);
|
|
908
|
+
|
|
909
|
+
#else
|
|
910
|
+
return linearize_depth(linDepth, nearZ, farZ);
|
|
911
|
+
#endif
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
915
|
+
vec2 uv = posS.xy;
|
|
916
|
+
float z = posS.z;
|
|
917
|
+
float nearZ =near;
|
|
918
|
+
float farZ = far;
|
|
919
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
920
|
+
float a = farZ / (farZ - nearZ);
|
|
921
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
922
|
+
float linDepth = a + b / depth;
|
|
923
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
924
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
925
|
+
return wpos.xyz / wpos.w;
|
|
926
|
+
}
|
|
927
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
928
|
+
#ifdef LOGDEPTH
|
|
929
|
+
#ifndef ORTHO
|
|
930
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
931
|
+
#endif
|
|
932
|
+
#endif
|
|
933
|
+
#ifdef ORTHO
|
|
934
|
+
float z = depth * 2. - 1.;
|
|
935
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
936
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
937
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
938
|
+
return viewSpacePosition.xyz;
|
|
939
|
+
#else
|
|
940
|
+
vec2 ndc = coord * 2. - 1.;
|
|
941
|
+
float ndcZ = depth * 2. - 1.;
|
|
942
|
+
mat4 Q = projectionMatrixInv;
|
|
943
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
944
|
+
float invW = 1. / (Q[2][3] * ndcZ + Q[3][3]);
|
|
945
|
+
return view * invW;
|
|
946
|
+
#endif
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
950
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
951
|
+
#ifdef REVERSEDEPTH
|
|
952
|
+
float c0 = 1.0 - texelFetch(sceneDepth, p, 0).x;
|
|
953
|
+
float l2 = 1.0 - texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
954
|
+
float l1 = 1.0 - texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
955
|
+
float r1 = 1.0 - texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
956
|
+
float r2 = 1.0 - texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
957
|
+
float b2 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
958
|
+
float b1 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
959
|
+
float t1 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
960
|
+
float t2 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
961
|
+
#else
|
|
962
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
963
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
964
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
965
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
966
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
967
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
968
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
969
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
970
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
971
|
+
#endif
|
|
972
|
+
|
|
973
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
974
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
975
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
976
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
977
|
+
|
|
978
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
979
|
+
|
|
980
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
981
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
982
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
983
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
984
|
+
|
|
985
|
+
return normalize(cross(dpdx, dpdy));
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
mat3 makeRotationZ(float theta) {
|
|
989
|
+
float c = cos(theta);
|
|
990
|
+
float s = sin(theta);
|
|
991
|
+
return mat3(c, - s, 0,
|
|
992
|
+
s, c, 0,
|
|
993
|
+
0, 0, 1);
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
void main() {
|
|
997
|
+
vec4 diffuse = texture2D(sceneDiffuse, vUv);
|
|
998
|
+
#ifdef REVERSEDEPTH
|
|
999
|
+
float depth = 1.0 - texture2D(sceneDepth, vUv).x;
|
|
1000
|
+
#else
|
|
1001
|
+
float depth = texture2D(sceneDepth, vUv).x;
|
|
1002
|
+
#endif
|
|
1003
|
+
if (depth == 1.0) {
|
|
1004
|
+
gl_FragColor = vec4(vec3(1.0), 1.0);
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
1008
|
+
#ifdef HALFRES
|
|
1009
|
+
vec3 normal = texture2D(sceneNormal, vUv).rgb;
|
|
1010
|
+
#else
|
|
1011
|
+
vec3 normal = computeNormal(worldPos, vUv);
|
|
1012
|
+
#endif
|
|
1013
|
+
vec4 noise = texture2D(bluenoise, gl_FragCoord.xy / 128.0);
|
|
1014
|
+
vec2 harmoniousNumbers = vec2(
|
|
1015
|
+
1.618033988749895,
|
|
1016
|
+
1.324717957244746
|
|
1017
|
+
);
|
|
1018
|
+
noise.rg += harmoniousNumbers * frame;
|
|
1019
|
+
noise.rg = fract(noise.rg);
|
|
1020
|
+
vec3 helperVec = vec3(0.0, 1.0, 0.0);
|
|
1021
|
+
if (dot(helperVec, normal) > 0.99) {
|
|
1022
|
+
helperVec = vec3(1.0, 0.0, 0.0);
|
|
1023
|
+
}
|
|
1024
|
+
vec3 tangent = normalize(cross(helperVec, normal));
|
|
1025
|
+
vec3 bitangent = cross(normal, tangent);
|
|
1026
|
+
mediump mat3 tbn = mat3(tangent, bitangent, normal) * makeRotationZ( noise.r * 3.1415962 * 2.0) ;
|
|
1027
|
+
|
|
1028
|
+
mediump float occluded = 0.0;
|
|
1029
|
+
mediump float totalWeight = 0.0;
|
|
1030
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
1031
|
+
worldPos,
|
|
1032
|
+
getWorldPos(depth, vUv +
|
|
1033
|
+
vec2(radius, 0.0) / resolution)
|
|
1034
|
+
) : radius;
|
|
1035
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
1036
|
+
radiusToUse * distanceFalloff
|
|
1037
|
+
: radiusToUse * distanceFalloff * 0.2;
|
|
1038
|
+
float bias = (min(
|
|
1039
|
+
0.1,
|
|
1040
|
+
distanceFalloffToUse * 0.1
|
|
1041
|
+
) / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse;
|
|
1042
|
+
bias = biasAdjustment.x + biasAdjustment.y * bias;
|
|
1043
|
+
mediump float offsetMove = noise.g;
|
|
1044
|
+
mediump float offsetMoveInv = 1.0 / FSAMPLES;
|
|
1045
|
+
float farTimesNear = far * near;
|
|
1046
|
+
float farMinusNear = far - near;
|
|
1047
|
+
|
|
1048
|
+
for(int i = 0; i < SAMPLES; i++) {
|
|
1049
|
+
mediump vec3 sampleDirection = tbn * samples[i];
|
|
1050
|
+
|
|
1051
|
+
float moveAmt = fract(offsetMove);
|
|
1052
|
+
offsetMove += offsetMoveInv;
|
|
1053
|
+
vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection;
|
|
1054
|
+
vec4 offset = projMat * vec4(samplePos, 1.0);
|
|
1055
|
+
offset.xyz /= offset.w;
|
|
1056
|
+
offset.xyz = offset.xyz * 0.5 + 0.5;
|
|
1057
|
+
|
|
1058
|
+
if (all(greaterThan(offset.xyz * (1.0 - offset.xyz), vec3(0.0)))) {
|
|
1059
|
+
#ifdef REVERSEDEPTH
|
|
1060
|
+
float sampleDepth = 1.0 - textureLod(sceneDepth, offset.xy, 0.0).x;
|
|
1061
|
+
#else
|
|
1062
|
+
float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x;
|
|
1063
|
+
#endif
|
|
1064
|
+
|
|
1065
|
+
/*#ifdef LOGDEPTH
|
|
1066
|
+
float distSample = linearize_depth_log(sampleDepth, near, far);
|
|
1067
|
+
#else
|
|
1068
|
+
#ifdef ORTHO
|
|
1069
|
+
float distSample = near + farMinusNear * sampleDepth;
|
|
1070
|
+
#else
|
|
1071
|
+
float distSample = (farTimesNear) / (far - sampleDepth * farMinusNear);
|
|
1072
|
+
#endif
|
|
1073
|
+
#endif*/
|
|
1074
|
+
#ifdef ORTHO
|
|
1075
|
+
float distSample = near + sampleDepth * farMinusNear;
|
|
1076
|
+
#else
|
|
1077
|
+
#ifdef LOGDEPTH
|
|
1078
|
+
float distSample = linearize_depth_log(sampleDepth, near, far);
|
|
1079
|
+
#else
|
|
1080
|
+
float distSample = (farTimesNear) / (far - sampleDepth * farMinusNear);
|
|
1081
|
+
#endif
|
|
1082
|
+
#endif
|
|
1083
|
+
|
|
1084
|
+
#ifdef ORTHO
|
|
1085
|
+
float distWorld = near + offset.z * farMinusNear;
|
|
1086
|
+
#else
|
|
1087
|
+
float distWorld = (farTimesNear) / (far - offset.z * farMinusNear);
|
|
1088
|
+
#endif
|
|
1089
|
+
|
|
1090
|
+
mediump float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld)));
|
|
1091
|
+
vec2 diff = gl_FragCoord.xy - floor(offset.xy * resolution);
|
|
1092
|
+
occluded += rangeCheck * float(distSample != distWorld) * float(sampleDepth != depth) * step(distSample + bias, distWorld) * step(
|
|
1093
|
+
1.0,
|
|
1094
|
+
dot(diff, diff)
|
|
1095
|
+
);
|
|
1096
|
+
|
|
1097
|
+
totalWeight ++;
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
float occ = clamp(1.0 - occluded / (totalWeight == 0.0 ? 1.0 : totalWeight), 0.0, 1.0);
|
|
1101
|
+
gl_FragColor = vec4(occ, 0.5 + 0.5 * normal);
|
|
1102
|
+
}`},aa={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},transparencyDWFalse:{value:null},transparencyDWTrue:{value:null},transparencyDWTrueDepth:{value:null},transparencyAware:{value:!1},projMat:{value:new r3.Matrix4},viewMat:{value:new r3.Matrix4},projectionMatrixInv:{value:new r3.Matrix4},viewMatrixInv:{value:new r3.Matrix4},cameraPos:{value:new r3.Vector3},resolution:{value:new r3.Vector2},color:{value:new r3.Vector3(0,0,0)},blueNoise:{value:null},downsampledDepth:{value:null},time:{value:0},intensity:{value:10},renderMode:{value:0},gammaCorrection:{value:!1},ortho:{value:!1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1},radius:{value:0},distanceFalloff:{value:1},fog:{value:!1},fogExp:{value:!1},fogDensity:{value:0},fogNear:{value:1/0},fogFar:{value:1/0},colorMultiply:{value:!0},aoTones:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
1103
|
+
varying vec2 vUv;
|
|
1104
|
+
void main() {
|
|
1105
|
+
vUv = uv;
|
|
1106
|
+
gl_Position = vec4(position, 1);
|
|
1107
|
+
}`,fragmentShader:`
|
|
1108
|
+
uniform sampler2D sceneDiffuse;
|
|
1109
|
+
uniform highp sampler2D sceneDepth;
|
|
1110
|
+
uniform highp sampler2D downsampledDepth;
|
|
1111
|
+
uniform highp sampler2D transparencyDWFalse;
|
|
1112
|
+
uniform highp sampler2D transparencyDWTrue;
|
|
1113
|
+
uniform highp sampler2D transparencyDWTrueDepth;
|
|
1114
|
+
uniform sampler2D tDiffuse;
|
|
1115
|
+
uniform sampler2D blueNoise;
|
|
1116
|
+
uniform vec2 resolution;
|
|
1117
|
+
uniform vec3 color;
|
|
1118
|
+
uniform mat4 projectionMatrixInv;
|
|
1119
|
+
uniform mat4 viewMatrixInv;
|
|
1120
|
+
uniform float intensity;
|
|
1121
|
+
uniform float renderMode;
|
|
1122
|
+
uniform float near;
|
|
1123
|
+
uniform float far;
|
|
1124
|
+
uniform float aoTones;
|
|
1125
|
+
uniform bool gammaCorrection;
|
|
1126
|
+
uniform bool ortho;
|
|
1127
|
+
uniform bool screenSpaceRadius;
|
|
1128
|
+
uniform bool fog;
|
|
1129
|
+
uniform bool fogExp;
|
|
1130
|
+
uniform bool colorMultiply;
|
|
1131
|
+
uniform bool transparencyAware;
|
|
1132
|
+
uniform float fogDensity;
|
|
1133
|
+
uniform float fogNear;
|
|
1134
|
+
uniform float fogFar;
|
|
1135
|
+
uniform float radius;
|
|
1136
|
+
uniform float distanceFalloff;
|
|
1137
|
+
uniform vec3 cameraPos;
|
|
1138
|
+
varying vec2 vUv;
|
|
1139
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
1140
|
+
{
|
|
1141
|
+
return (zFar * zNear) / (zFar - d * (zFar - zNear));
|
|
1142
|
+
}
|
|
1143
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
1144
|
+
return nearZ + (farZ - nearZ) * d;
|
|
1145
|
+
}
|
|
1146
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
1147
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
1148
|
+
float a = farZ / (farZ - nearZ);
|
|
1149
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
1150
|
+
float linDepth = a + b / depth;
|
|
1151
|
+
return ortho ? linearize_depth_ortho(
|
|
1152
|
+
linDepth,
|
|
1153
|
+
nearZ,
|
|
1154
|
+
farZ
|
|
1155
|
+
) :linearize_depth(linDepth, nearZ, farZ);
|
|
1156
|
+
}
|
|
1157
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
1158
|
+
vec2 uv = posS.xy;
|
|
1159
|
+
float z = posS.z;
|
|
1160
|
+
float nearZ =near;
|
|
1161
|
+
float farZ = far;
|
|
1162
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
1163
|
+
float a = farZ / (farZ - nearZ);
|
|
1164
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
1165
|
+
float linDepth = a + b / depth;
|
|
1166
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
1167
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
1168
|
+
return wpos.xyz / wpos.w;
|
|
1169
|
+
}
|
|
1170
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
1171
|
+
#ifdef LOGDEPTH
|
|
1172
|
+
#ifndef ORTHO
|
|
1173
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
1174
|
+
#endif
|
|
1175
|
+
#endif
|
|
1176
|
+
// }
|
|
1177
|
+
#ifdef ORTHO
|
|
1178
|
+
float z = depth * 2. - 1.;
|
|
1179
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
1180
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
1181
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
1182
|
+
return viewSpacePosition.xyz;
|
|
1183
|
+
#else
|
|
1184
|
+
vec2 ndc = coord * 2. - 1.;
|
|
1185
|
+
float ndcZ = depth * 2. - 1.;
|
|
1186
|
+
mat4 Q = projectionMatrixInv;
|
|
1187
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
1188
|
+
float invW = 1. / (Q[2][3] * ndcZ + Q[3][3]);
|
|
1189
|
+
return view * invW;
|
|
1190
|
+
#endif
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
1194
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
1195
|
+
#ifdef REVERSEDEPTH
|
|
1196
|
+
float c0 = 1.0 - texelFetch(sceneDepth, p, 0).x;
|
|
1197
|
+
float l2 = 1.0 - texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
1198
|
+
float l1 = 1.0 - texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
1199
|
+
float r1 = 1.0 - texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
1200
|
+
float r2 = 1.0 - texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
1201
|
+
float b2 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
1202
|
+
float b1 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
1203
|
+
float t1 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
1204
|
+
float t2 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
1205
|
+
#else
|
|
1206
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
1207
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
1208
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
1209
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
1210
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
1211
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
1212
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
1213
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
1214
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
1215
|
+
#endif
|
|
1216
|
+
|
|
1217
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
1218
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
1219
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
1220
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
1221
|
+
|
|
1222
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
1223
|
+
|
|
1224
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
1225
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
1226
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
1227
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
1228
|
+
|
|
1229
|
+
return normalize(cross(dpdx, dpdy));
|
|
1230
|
+
}
|
|
1231
|
+
|
|
1232
|
+
#include <common>
|
|
1233
|
+
#include <dithering_pars_fragment>
|
|
1234
|
+
void main() {
|
|
1235
|
+
//vec4 texel = texture2D(tDiffuse, vUv);//vec3(0.0);
|
|
1236
|
+
vec4 sceneTexel = texture2D(sceneDiffuse, vUv);
|
|
1237
|
+
#ifdef REVERSEDEPTH
|
|
1238
|
+
float depth = 1.0 - texture2D(sceneDepth, vUv).x;
|
|
1239
|
+
#else
|
|
1240
|
+
float depth = texture2D(sceneDepth, vUv).x;
|
|
1241
|
+
#endif
|
|
1242
|
+
#ifdef HALFRES
|
|
1243
|
+
vec4 texel;
|
|
1244
|
+
if (depth == 1.0) {
|
|
1245
|
+
texel = texture2D(tDiffuse, vUv);
|
|
1246
|
+
} else {
|
|
1247
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
1248
|
+
vec3 normal = computeNormal(getWorldPos(depth, vUv), vUv);
|
|
1249
|
+
// vec4 texel = texture2D(tDiffuse, vUv);
|
|
1250
|
+
// Find closest depth;
|
|
1251
|
+
float totalWeight = 0.0;
|
|
1252
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
1253
|
+
worldPos,
|
|
1254
|
+
getWorldPos(depth, vUv +
|
|
1255
|
+
vec2(radius, 0.0) / resolution)
|
|
1256
|
+
) : radius;
|
|
1257
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
1258
|
+
radiusToUse * distanceFalloff
|
|
1259
|
+
: distanceFalloff;
|
|
1260
|
+
for(float x = -1.0; x <= 1.0; x++) {
|
|
1261
|
+
for(float y = -1.0; y <= 1.0; y++) {
|
|
1262
|
+
vec2 offset = vec2(x, y);
|
|
1263
|
+
ivec2 p = ivec2(
|
|
1264
|
+
(vUv * resolution * 0.5) + offset
|
|
1265
|
+
);
|
|
1266
|
+
vec2 pUv = vec2(p) / (resolution * 0.5);
|
|
1267
|
+
float sampleDepth = texelFetch(downsampledDepth,p, 0).x;
|
|
1268
|
+
vec4 sampleInfo = texelFetch(tDiffuse, p, 0);
|
|
1269
|
+
vec3 normalSample = sampleInfo.gba * 2.0 - 1.0;
|
|
1270
|
+
vec3 worldPosSample = getWorldPos(sampleDepth, pUv);
|
|
1271
|
+
float tangentPlaneDist = abs(dot(worldPosSample - worldPos, normal));
|
|
1272
|
+
float rangeCheck = exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0);
|
|
1273
|
+
float weight = rangeCheck;
|
|
1274
|
+
totalWeight += weight;
|
|
1275
|
+
texel += sampleInfo * weight;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
if (totalWeight == 0.0) {
|
|
1279
|
+
texel = texture2D(tDiffuse, vUv);
|
|
1280
|
+
} else {
|
|
1281
|
+
texel /= totalWeight;
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
#else
|
|
1285
|
+
vec4 texel = texture2D(tDiffuse, vUv);
|
|
1286
|
+
#endif
|
|
1287
|
+
|
|
1288
|
+
#ifdef LOGDEPTH
|
|
1289
|
+
texel.r = clamp(texel.r, 0.0, 1.0);
|
|
1290
|
+
if (texel.r == 0.0) {
|
|
1291
|
+
texel.r = 1.0;
|
|
1292
|
+
}
|
|
1293
|
+
#endif
|
|
1294
|
+
|
|
1295
|
+
float finalAo = pow(texel.r, intensity);
|
|
1296
|
+
if (aoTones > 0.0) {
|
|
1297
|
+
finalAo = ceil(finalAo * aoTones) / aoTones;
|
|
1298
|
+
}
|
|
1299
|
+
float fogFactor;
|
|
1300
|
+
float fogDepth = distance(
|
|
1301
|
+
cameraPos,
|
|
1302
|
+
getWorldPos(depth, vUv)
|
|
1303
|
+
);
|
|
1304
|
+
if (fog) {
|
|
1305
|
+
if (fogExp) {
|
|
1306
|
+
fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );
|
|
1307
|
+
} else {
|
|
1308
|
+
fogFactor = smoothstep( fogNear, fogFar, fogDepth );
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
if (transparencyAware) {
|
|
1312
|
+
float transparencyDWOff = texture2D(transparencyDWFalse, vUv).a;
|
|
1313
|
+
float transparencyDWOn = texture2D(transparencyDWTrue, vUv).a;
|
|
1314
|
+
float adjustmentFactorOff = transparencyDWOff;
|
|
1315
|
+
#ifdef REVERSEDEPTH
|
|
1316
|
+
float depthSample = 1.0 - texture2D(sceneDepth, vUv).r;
|
|
1317
|
+
float trueDepthSample = 1.0 - texture2D(transparencyDWTrueDepth, vUv).r;
|
|
1318
|
+
#else
|
|
1319
|
+
float depthSample = texture2D(sceneDepth, vUv).r;
|
|
1320
|
+
float trueDepthSample = texture2D(transparencyDWTrueDepth, vUv).r;
|
|
1321
|
+
#endif
|
|
1322
|
+
float adjustmentFactorOn = (1.0 - transparencyDWOn) * (
|
|
1323
|
+
trueDepthSample == depthSample ? 1.0 : 0.0
|
|
1324
|
+
);
|
|
1325
|
+
float adjustmentFactor = max(adjustmentFactorOff, adjustmentFactorOn);
|
|
1326
|
+
finalAo = mix(finalAo, 1.0, adjustmentFactor);
|
|
1327
|
+
}
|
|
1328
|
+
finalAo = mix(finalAo, 1.0, fogFactor);
|
|
1329
|
+
vec3 aoApplied = color * mix(vec3(1.0), sceneTexel.rgb, float(colorMultiply));
|
|
1330
|
+
if (renderMode == 0.0) {
|
|
1331
|
+
gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
1332
|
+
} else if (renderMode == 1.0) {
|
|
1333
|
+
gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
1334
|
+
} else if (renderMode == 2.0) {
|
|
1335
|
+
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
|
|
1336
|
+
} else if (renderMode == 3.0) {
|
|
1337
|
+
if (vUv.x < 0.5) {
|
|
1338
|
+
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
|
|
1339
|
+
} else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) {
|
|
1340
|
+
gl_FragColor = vec4(1.0);
|
|
1341
|
+
} else {
|
|
1342
|
+
gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
1343
|
+
}
|
|
1344
|
+
} else if (renderMode == 4.0) {
|
|
1345
|
+
if (vUv.x < 0.5) {
|
|
1346
|
+
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
|
|
1347
|
+
} else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) {
|
|
1348
|
+
gl_FragColor = vec4(1.0);
|
|
1349
|
+
} else {
|
|
1350
|
+
gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
#include <dithering_fragment>
|
|
1354
|
+
if (gammaCorrection) {
|
|
1355
|
+
gl_FragColor = sRGBTransferOETF(gl_FragColor);
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
`},ai={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},projMat:{value:new r3.Matrix4},viewMat:{value:new r3.Matrix4},projectionMatrixInv:{value:new r3.Matrix4},viewMatrixInv:{value:new r3.Matrix4},cameraPos:{value:new r3.Vector3},resolution:{value:new r3.Vector2},time:{value:0},r:{value:5},blueNoise:{value:null},radius:{value:12},worldRadius:{value:5},index:{value:0},poissonDisk:{value:[]},distanceFalloff:{value:1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
1359
|
+
varying vec2 vUv;
|
|
1360
|
+
void main() {
|
|
1361
|
+
vUv = uv;
|
|
1362
|
+
gl_Position = vec4(position, 1.0);
|
|
1363
|
+
}`,fragmentShader:`
|
|
1364
|
+
uniform sampler2D sceneDiffuse;
|
|
1365
|
+
uniform highp sampler2D sceneDepth;
|
|
1366
|
+
uniform sampler2D tDiffuse;
|
|
1367
|
+
uniform sampler2D blueNoise;
|
|
1368
|
+
uniform mat4 projectionMatrixInv;
|
|
1369
|
+
uniform mat4 viewMatrixInv;
|
|
1370
|
+
uniform vec2 resolution;
|
|
1371
|
+
uniform float r;
|
|
1372
|
+
uniform float radius;
|
|
1373
|
+
uniform float worldRadius;
|
|
1374
|
+
uniform float index;
|
|
1375
|
+
uniform float near;
|
|
1376
|
+
uniform float far;
|
|
1377
|
+
uniform float distanceFalloff;
|
|
1378
|
+
uniform bool screenSpaceRadius;
|
|
1379
|
+
varying vec2 vUv;
|
|
1380
|
+
|
|
1381
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
1382
|
+
{
|
|
1383
|
+
highp float z_n = 2.0 * d - 1.0;
|
|
1384
|
+
return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));
|
|
1385
|
+
}
|
|
1386
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
1387
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
1388
|
+
float a = farZ / (farZ - nearZ);
|
|
1389
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
1390
|
+
float linDepth = a + b / depth;
|
|
1391
|
+
return linearize_depth(linDepth, nearZ, farZ);
|
|
1392
|
+
}
|
|
1393
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
1394
|
+
return nearZ + (farZ - nearZ) * d;
|
|
1395
|
+
}
|
|
1396
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
1397
|
+
vec2 uv = posS.xy;
|
|
1398
|
+
float z = posS.z;
|
|
1399
|
+
float nearZ =near;
|
|
1400
|
+
float farZ = far;
|
|
1401
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
1402
|
+
float a = farZ / (farZ - nearZ);
|
|
1403
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
1404
|
+
float linDepth = a + b / depth;
|
|
1405
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
1406
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
1407
|
+
return wpos.xyz / wpos.w;
|
|
1408
|
+
}
|
|
1409
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
1410
|
+
#ifdef LOGDEPTH
|
|
1411
|
+
#ifndef ORTHO
|
|
1412
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
1413
|
+
#endif
|
|
1414
|
+
#endif
|
|
1415
|
+
|
|
1416
|
+
#ifdef ORTHO
|
|
1417
|
+
float z = depth * 2. - 1.;
|
|
1418
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
1419
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
1420
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
1421
|
+
return viewSpacePosition.xyz;
|
|
1422
|
+
#else
|
|
1423
|
+
vec2 ndc = coord * 2. - 1.;
|
|
1424
|
+
float ndcZ = depth * 2. - 1.;
|
|
1425
|
+
mat4 Q = projectionMatrixInv;
|
|
1426
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
1427
|
+
float invW = 1.0 / (Q[2][3] * ndcZ + Q[3][3]);
|
|
1428
|
+
return view * invW;
|
|
1429
|
+
#endif
|
|
1430
|
+
}
|
|
1431
|
+
#include <common>
|
|
1432
|
+
#define NUM_SAMPLES 16
|
|
1433
|
+
uniform vec2 poissonDisk[NUM_SAMPLES];
|
|
1434
|
+
void main() {
|
|
1435
|
+
const float pi = 3.14159;
|
|
1436
|
+
vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);
|
|
1437
|
+
vec2 uv = vUv;
|
|
1438
|
+
vec4 data = texture2D(tDiffuse, vUv);
|
|
1439
|
+
float occlusion = data.r;
|
|
1440
|
+
float baseOcc = data.r;
|
|
1441
|
+
vec3 normal = data.gba * 2.0 - 1.0;
|
|
1442
|
+
float count = 1.0;
|
|
1443
|
+
float d = texture2D(sceneDepth, vUv).x;
|
|
1444
|
+
if (d == 1.0) {
|
|
1445
|
+
gl_FragColor = data;
|
|
1446
|
+
return;
|
|
1447
|
+
}
|
|
1448
|
+
vec3 worldPos = getWorldPos(d, vUv);
|
|
1449
|
+
float size = radius;
|
|
1450
|
+
float angle;
|
|
1451
|
+
if (index == 0.0) {
|
|
1452
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;
|
|
1453
|
+
} else if (index == 1.0) {
|
|
1454
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;
|
|
1455
|
+
} else if (index == 2.0) {
|
|
1456
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;
|
|
1457
|
+
} else {
|
|
1458
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));
|
|
1462
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
1463
|
+
worldPos,
|
|
1464
|
+
getWorldPos(d, vUv +
|
|
1465
|
+
vec2(worldRadius, 0.0) / resolution)
|
|
1466
|
+
) : worldRadius;
|
|
1467
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
1468
|
+
radiusToUse * distanceFalloff
|
|
1469
|
+
: radiusToUse * distanceFalloff * 0.2;
|
|
1470
|
+
|
|
1471
|
+
float invDistance = (1.0 / distanceFalloffToUse);
|
|
1472
|
+
for(int i = 0; i < NUM_SAMPLES; i++) {
|
|
1473
|
+
vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size;
|
|
1474
|
+
vec4 dataSample = texture2D(tDiffuse, uv + offset);
|
|
1475
|
+
float occSample = dataSample.r;
|
|
1476
|
+
vec3 normalSample = dataSample.gba * 2.0 - 1.0;
|
|
1477
|
+
float dSample = texture2D(sceneDepth, uv + offset).x;
|
|
1478
|
+
vec3 worldPosSample = getWorldPos(dSample, uv + offset);
|
|
1479
|
+
float tangentPlaneDist = abs(dot(worldPosSample - worldPos, normal));
|
|
1480
|
+
float rangeCheck = float(dSample != 1.0) * exp(-1.0 * tangentPlaneDist * invDistance ) * max(dot(normal, normalSample), 0.0);
|
|
1481
|
+
occlusion += occSample * rangeCheck;
|
|
1482
|
+
count += rangeCheck;
|
|
1483
|
+
}
|
|
1484
|
+
if (count > 0.0) {
|
|
1485
|
+
occlusion /= count;
|
|
1486
|
+
}
|
|
1487
|
+
occlusion = clamp(occlusion, 0.0, 1.0);
|
|
1488
|
+
if (occlusion == 0.0) {
|
|
1489
|
+
occlusion = 1.0;
|
|
1490
|
+
}
|
|
1491
|
+
gl_FragColor = vec4(occlusion, 0.5 + 0.5 * normal);
|
|
1492
|
+
}
|
|
1493
|
+
`},as={uniforms:{sceneDepth:{value:null},resolution:{value:new r3.Vector2},near:{value:.1},far:{value:1e3},viewMatrixInv:{value:new r3.Matrix4},projectionMatrixInv:{value:new r3.Matrix4},logDepth:{value:!1},ortho:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
1494
|
+
varying vec2 vUv;
|
|
1495
|
+
void main() {
|
|
1496
|
+
vUv = uv;
|
|
1497
|
+
gl_Position = vec4(position, 1);
|
|
1498
|
+
}`,fragmentShader:`
|
|
1499
|
+
uniform highp sampler2D sceneDepth;
|
|
1500
|
+
uniform vec2 resolution;
|
|
1501
|
+
uniform float near;
|
|
1502
|
+
uniform float far;
|
|
1503
|
+
uniform bool logDepth;
|
|
1504
|
+
uniform bool ortho;
|
|
1505
|
+
uniform mat4 viewMatrixInv;
|
|
1506
|
+
uniform mat4 projectionMatrixInv;
|
|
1507
|
+
varying vec2 vUv;
|
|
1508
|
+
layout(location = 1) out vec4 gNormal;
|
|
1509
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
1510
|
+
vec2 uv = posS.xy;
|
|
1511
|
+
float z = posS.z;
|
|
1512
|
+
float nearZ =near;
|
|
1513
|
+
float farZ = far;
|
|
1514
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
1515
|
+
float a = farZ / (farZ - nearZ);
|
|
1516
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
1517
|
+
float linDepth = a + b / depth;
|
|
1518
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
1519
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
1520
|
+
return wpos.xyz / wpos.w;
|
|
1521
|
+
}
|
|
1522
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
1523
|
+
if (logDepth && !ortho) {
|
|
1524
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
1525
|
+
}
|
|
1526
|
+
if (ortho) {
|
|
1527
|
+
float z = depth * 2. - 1.;
|
|
1528
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
1529
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
1530
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
1531
|
+
return viewSpacePosition.xyz;
|
|
1532
|
+
}
|
|
1533
|
+
vec2 ndc = coord * 2. - 1.;
|
|
1534
|
+
float ndcZ = depth * 2. - 1.;
|
|
1535
|
+
mat4 Q = projectionMatrixInv;
|
|
1536
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
1537
|
+
float invW = 1. / (Q[2][3] * ndcZ + Q[3][3]);
|
|
1538
|
+
return view * invW;
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
1542
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
1543
|
+
#ifdef REVERSEDEPTH
|
|
1544
|
+
float c0 = 1.0 - texelFetch(sceneDepth, p, 0).x;
|
|
1545
|
+
float l2 = 1.0 - texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
1546
|
+
float l1 = 1.0 - texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
1547
|
+
float r1 = 1.0 - texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
1548
|
+
float r2 = 1.0 - texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
1549
|
+
float b2 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
1550
|
+
float b1 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
1551
|
+
float t1 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
1552
|
+
float t2 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
1553
|
+
#else
|
|
1554
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
1555
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
1556
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
1557
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
1558
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
1559
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
1560
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
1561
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
1562
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
1563
|
+
#endif
|
|
1564
|
+
|
|
1565
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
1566
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
1567
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
1568
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
1569
|
+
|
|
1570
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
1571
|
+
|
|
1572
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
1573
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
1574
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
1575
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
1576
|
+
|
|
1577
|
+
return normalize(cross(dpdx, dpdy));
|
|
1578
|
+
}
|
|
1579
|
+
void main() {
|
|
1580
|
+
vec2 uv = vUv - vec2(0.5) / resolution;
|
|
1581
|
+
vec2 pixelSize = vec2(1.0) / resolution;
|
|
1582
|
+
highp vec2[4] uvSamples;
|
|
1583
|
+
uvSamples[0] = uv;
|
|
1584
|
+
uvSamples[1] = uv + vec2(pixelSize.x, 0.0);
|
|
1585
|
+
uvSamples[2] = uv + vec2(0.0, pixelSize.y);
|
|
1586
|
+
uvSamples[3] = uv + pixelSize;
|
|
1587
|
+
#ifdef REVERSEDEPTH
|
|
1588
|
+
float depth00 = 1.0 - texture2D(sceneDepth, uvSamples[0]).r;
|
|
1589
|
+
float depth10 = 1.0 - texture2D(sceneDepth, uvSamples[1]).r;
|
|
1590
|
+
float depth01 = 1.0 - texture2D(sceneDepth, uvSamples[2]).r;
|
|
1591
|
+
float depth11 = 1.0 - texture2D(sceneDepth, uvSamples[3]).r;
|
|
1592
|
+
#else
|
|
1593
|
+
float depth00 = texture2D(sceneDepth, uvSamples[0]).r;
|
|
1594
|
+
float depth10 = texture2D(sceneDepth, uvSamples[1]).r;
|
|
1595
|
+
float depth01 = texture2D(sceneDepth, uvSamples[2]).r;
|
|
1596
|
+
float depth11 = texture2D(sceneDepth, uvSamples[3]).r;
|
|
1597
|
+
#endif
|
|
1598
|
+
float minDepth = min(min(depth00, depth10), min(depth01, depth11));
|
|
1599
|
+
float maxDepth = max(max(depth00, depth10), max(depth01, depth11));
|
|
1600
|
+
float targetDepth = minDepth;
|
|
1601
|
+
// Checkerboard pattern to avoid artifacts
|
|
1602
|
+
if (mod(gl_FragCoord.x + gl_FragCoord.y, 2.0) > 0.5) {
|
|
1603
|
+
targetDepth = maxDepth;
|
|
1604
|
+
}
|
|
1605
|
+
int chosenIndex = 0;
|
|
1606
|
+
float[4] samples;
|
|
1607
|
+
samples[0] = depth00;
|
|
1608
|
+
samples[1] = depth10;
|
|
1609
|
+
samples[2] = depth01;
|
|
1610
|
+
samples[3] = depth11;
|
|
1611
|
+
for(int i = 0; i < 4; ++i) {
|
|
1612
|
+
if (samples[i] == targetDepth) {
|
|
1613
|
+
chosenIndex = i;
|
|
1614
|
+
break;
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
gl_FragColor = vec4(samples[chosenIndex], 0.0, 0.0, 1.0);
|
|
1618
|
+
gNormal = vec4(computeNormal(
|
|
1619
|
+
getWorldPos(samples[chosenIndex], uvSamples[chosenIndex]), uvSamples[chosenIndex]
|
|
1620
|
+
), 0.0);
|
|
1621
|
+
}`},an=Uint8Array.from(atob("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"),e=>e.charCodeAt(0)),ao=parseInt(r3.REVISION.replace(/\D+/g,""))>=162?class extends r3.WebGLRenderTarget{constructor(e=1,t=1,r=1,a={}){super(e,t,{...a,count:r}),this.isWebGLMultipleRenderTargets=!0}get texture(){return this.textures}}:class extends r3.WebGLRenderTarget{constructor(e=1,t=1,r=1,a={}){super(e,t,a),this.isWebGLMultipleRenderTargets=!0;const i=this.texture;this.texture=[];for(let e=0;e<r;e++)this.texture[e]=i.clone(),this.texture[e].isRenderTargetTexture=!0}setSize(e,t,r=1){if(this.width!==e||this.height!==t||this.depth!==r){this.width=e,this.height=t,this.depth=r;for(let a=0,i=this.texture.length;a<i;a++)this.texture[a].image.width=e,this.texture[a].image.height=t,this.texture[a].image.depth=r;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}copy(e){this.dispose(),this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.texture.length=0;for(let t=0,r=e.texture.length;t<r;t++)this.texture[t]=e.texture[t].clone(),this.texture[t].isRenderTargetTexture=!0;return this}};class al extends eW{constructor(e,t,r=512,a=512){super(),this.width=r,this.height=a,this.clear=!0,this.camera=t,this.scene=e,this.autosetGamma=!0,this.configuration=new Proxy({aoSamples:16,aoRadius:5,aoTones:0,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1,intensity:5,denoiseIterations:2,renderMode:0,biasOffset:0,biasMultiplier:0,color:new r3.Color(0,0,0),gammaCorrection:!0,depthBufferType:ac.Default,screenSpaceRadius:!1,halfRes:!1,depthAwareUpsampling:!0,colorMultiply:!0,transparencyAware:!1,accumulate:!1},{set:(e,t,r)=>{let a=e[t];return e[t]=r,r.equals?r.equals(a)||this.firstFrame():a!==r&&this.firstFrame(),"aoSamples"===t&&a!==r&&this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),"denoiseSamples"===t&&a!==r&&this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),"halfRes"===t&&a!==r&&(this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureHalfResTargets(),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.setSize(this.width,this.height)),"depthAwareUpsampling"===t&&a!==r&&this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),"gammaCorrection"===t&&(this.autosetGamma=!1),"transparencyAware"===t&&a!==r&&(this.autoDetectTransparency=!1,this.configureTransparencyTarget()),!0}}),this.samples=[],this.samplesDenoise=[],this.autoDetectTransparency=!0,this.frames=0,this.lastViewMatrix=new r3.Matrix4,this.lastProjectionMatrix=new r3.Matrix4,this.configureEffectCompositer(this.configuration.depthBufferType),this.configureSampleDependentPasses(),this.configureHalfResTargets(),this.detectTransparency(),this.configureTransparencyTarget(),this.copyQuad=new at(new r3.ShaderMaterial({uniforms:{tDiffuse:{value:null}},depthWrite:!1,vertexShader:`
|
|
1622
|
+
varying vec2 vUv;
|
|
1623
|
+
void main() {
|
|
1624
|
+
vUv = uv;
|
|
1625
|
+
gl_Position = vec4(position, 1);
|
|
1626
|
+
}
|
|
1627
|
+
`,fragmentShader:`
|
|
1628
|
+
uniform sampler2D tDiffuse;
|
|
1629
|
+
varying vec2 vUv;
|
|
1630
|
+
void main() {
|
|
1631
|
+
gl_FragColor = texture2D(tDiffuse, vUv);
|
|
1632
|
+
}
|
|
1633
|
+
`})),this.writeTargetInternal=new r3.WebGLRenderTarget(this.width,this.height,{minFilter:r3.LinearFilter,magFilter:r3.LinearFilter,depthBuffer:!1,format:r3.RGBAFormat}),this.readTargetInternal=new r3.WebGLRenderTarget(this.width,this.height,{minFilter:r3.LinearFilter,magFilter:r3.LinearFilter,depthBuffer:!1,format:r3.RGBAFormat}),this.outputTargetInternal=new r3.WebGLRenderTarget(this.width,this.height,{minFilter:r3.LinearFilter,magFilter:r3.LinearFilter,depthBuffer:!1}),this.accumulationRenderTarget=new r3.WebGLRenderTarget(this.width,this.height,{minFilter:r3.LinearFilter,magFilter:r3.LinearFilter,depthBuffer:!1,format:r3.RGBAFormat,type:r3.HalfFloatType,stencilBuffer:!1,depthBuffer:!1,alpha:!0}),this.accumulationQuad=new at(new r3.ShaderMaterial({uniforms:{frame:{value:0},tDiffuse:{value:null}},transparent:!0,opacity:1,vertexShader:`
|
|
1634
|
+
varying vec2 vUv;
|
|
1635
|
+
void main() {
|
|
1636
|
+
vUv = uv;
|
|
1637
|
+
gl_Position = vec4(position, 1);
|
|
1638
|
+
}`,fragmentShader:`
|
|
1639
|
+
uniform sampler2D tDiffuse;
|
|
1640
|
+
uniform float frame;
|
|
1641
|
+
varying vec2 vUv;
|
|
1642
|
+
void main() {
|
|
1643
|
+
vec4 color = texture2D(tDiffuse, vUv);
|
|
1644
|
+
gl_FragColor = vec4(color.rgb, 1.0 / (frame + 1.0));
|
|
1645
|
+
}
|
|
1646
|
+
`})),this.bluenoise=new r3.DataTexture(an,128,128),this.bluenoise.colorSpace=r3.NoColorSpace,this.bluenoise.wrapS=r3.RepeatWrapping,this.bluenoise.wrapT=r3.RepeatWrapping,this.bluenoise.minFilter=r3.NearestFilter,this.bluenoise.magFilter=r3.NearestFilter,this.bluenoise.needsUpdate=!0,this.lastTime=0,this.timeRollingAverage=.99,this.needsDepthTexture=!0,this.needsSwap=!0,this._r=new r3.Vector2,this._c=new r3.Color}configureHalfResTargets(){this.firstFrame(),this.configuration.halfRes?(this.depthDownsampleTarget=new ao(this.width/2,this.height/2,2),r3.REVISION<=161&&(this.depthDownsampleTarget.textures=this.depthDownsampleTarget.texture),this.depthDownsampleTarget.textures[0].format=r3.RedFormat,this.depthDownsampleTarget.textures[0].type=r3.FloatType,this.depthDownsampleTarget.textures[0].minFilter=r3.NearestFilter,this.depthDownsampleTarget.textures[0].magFilter=r3.NearestFilter,this.depthDownsampleTarget.textures[0].depthBuffer=!1,this.depthDownsampleTarget.textures[1].format=r3.RGBAFormat,this.depthDownsampleTarget.textures[1].type=r3.HalfFloatType,this.depthDownsampleTarget.textures[1].minFilter=r3.NearestFilter,this.depthDownsampleTarget.textures[1].magFilter=r3.NearestFilter,this.depthDownsampleTarget.textures[1].depthBuffer=!1,this.depthDownsampleQuad=new at(new r3.ShaderMaterial(as))):(this.depthDownsampleTarget&&(this.depthDownsampleTarget.dispose(),this.depthDownsampleTarget=null),this.depthDownsampleQuad&&(this.depthDownsampleQuad.dispose(),this.depthDownsampleQuad=null))}detectTransparency(){if(this.autoDetectTransparency){let e=!1;this.scene.traverse(t=>{t.material&&t.material.transparent&&(e=!0)}),e&&(this.configuration.transparencyAware=!0)}}configureTransparencyTarget(){this.configuration.transparencyAware?(this.transparencyRenderTargetDWFalse=new r3.WebGLRenderTarget(this.width,this.height,{minFilter:r3.LinearFilter,magFilter:r3.NearestFilter,type:r3.HalfFloatType,format:r3.RGBAFormat}),this.transparencyRenderTargetDWTrue=new r3.WebGLRenderTarget(this.width,this.height,{minFilter:r3.LinearFilter,magFilter:r3.NearestFilter,type:r3.HalfFloatType,format:r3.RGBAFormat}),this.transparencyRenderTargetDWTrue.depthTexture=new r3.DepthTexture(this.width,this.height,r3.UnsignedIntType),this.depthCopyPass=new at(new r3.ShaderMaterial({uniforms:{depthTexture:{value:this.depthTexture},reverseDepthBuffer:{value:this.configuration.depthBufferType===ac.Reverse}},vertexShader:`
|
|
1647
|
+
varying vec2 vUv;
|
|
1648
|
+
void main() {
|
|
1649
|
+
vUv = uv;
|
|
1650
|
+
gl_Position = vec4(position, 1);
|
|
1651
|
+
}`,fragmentShader:`
|
|
1652
|
+
uniform sampler2D depthTexture;
|
|
1653
|
+
uniform bool reverseDepthBuffer;
|
|
1654
|
+
varying vec2 vUv;
|
|
1655
|
+
void main() {
|
|
1656
|
+
if (reverseDepthBuffer) {
|
|
1657
|
+
float d = 1.0 - texture2D(depthTexture, vUv).r;
|
|
1658
|
+
|
|
1659
|
+
d += 0.00001;
|
|
1660
|
+
gl_FragDepth = 1.0 - d;
|
|
1661
|
+
} else {
|
|
1662
|
+
float d = texture2D(depthTexture, vUv).r;
|
|
1663
|
+
d += 0.00001;
|
|
1664
|
+
gl_FragDepth = d;
|
|
1665
|
+
}
|
|
1666
|
+
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
1667
|
+
}
|
|
1668
|
+
`}))):(this.transparencyRenderTargetDWFalse&&(this.transparencyRenderTargetDWFalse.dispose(),this.transparencyRenderTargetDWFalse=null),this.transparencyRenderTargetDWTrue&&(this.transparencyRenderTargetDWTrue.dispose(),this.transparencyRenderTargetDWTrue=null),this.depthCopyPass&&(this.depthCopyPass.dispose(),this.depthCopyPass=null))}renderTransparency(e){let t=this.scene.background,r=e.getClearColor(new r3.Color),a=e.getClearAlpha(),i=new Map,s=e.autoClearDepth;this.scene.traverse(e=>{i.set(e,e.visible)}),this.scene.background=null,e.autoClearDepth=!1,e.setClearColor(new r3.Color(0,0,0),0),this.depthCopyPass.material.uniforms.depthTexture.value=this.depthTexture,this.depthCopyPass.material.uniforms.reverseDepthBuffer.value=this.configuration.depthBufferType===ac.Reverse,e.setRenderTarget(this.transparencyRenderTargetDWFalse),this.scene.traverse(e=>{e.material&&(e.visible=i.get(e)&&(e.material.transparent&&!e.material.depthWrite&&!e.userData.treatAsOpaque||!!e.userData.cannotReceiveAO))}),e.clear(!0,!0,!0),this.depthCopyPass.render(e),e.render(this.scene,this.camera),e.setRenderTarget(this.transparencyRenderTargetDWTrue),this.scene.traverse(e=>{e.material&&(e.visible=i.get(e)&&e.material.transparent&&e.material.depthWrite&&!e.userData.treatAsOpaque)}),e.clear(!0,!0,!0),this.depthCopyPass.render(e),e.render(this.scene,this.camera),this.scene.traverse(e=>{e.visible=i.get(e)}),e.setClearColor(r,a),this.scene.background=t,e.autoClearDepth=s}configureSampleDependentPasses(){this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera)}configureAOPass(e=ac.Default,t=!1){this.firstFrame(),this.samples=this.generateHemisphereSamples(this.configuration.aoSamples);let r={...ar};r.fragmentShader=r.fragmentShader.replace("16",this.configuration.aoSamples).replace("16.0",this.configuration.aoSamples+".0"),e===ac.Log?r.fragmentShader="#define LOGDEPTH\n"+r.fragmentShader:e===ac.Reverse&&(r.fragmentShader="#define REVERSEDEPTH\n"+r.fragmentShader),t&&(r.fragmentShader="#define ORTHO\n"+r.fragmentShader),this.configuration.halfRes&&(r.fragmentShader="#define HALFRES\n"+r.fragmentShader),this.effectShaderQuad?(this.effectShaderQuad.material.dispose(),this.effectShaderQuad.material=new r3.ShaderMaterial(r)):this.effectShaderQuad=new at(new r3.ShaderMaterial(r))}configureDenoisePass(e=ac.Default,t=!1){this.firstFrame(),this.samplesDenoise=this.generateDenoiseSamples(this.configuration.denoiseSamples,11);let r={...ai};r.fragmentShader=r.fragmentShader.replace("16",this.configuration.denoiseSamples),e===ac.Log?r.fragmentShader="#define LOGDEPTH\n"+r.fragmentShader:e===ac.Reverse&&(r.fragmentShader="#define REVERSEDEPTH\n"+r.fragmentShader),t&&(r.fragmentShader="#define ORTHO\n"+r.fragmentShader),this.poissonBlurQuad?(this.poissonBlurQuad.material.dispose(),this.poissonBlurQuad.material=new r3.ShaderMaterial(r)):this.poissonBlurQuad=new at(new r3.ShaderMaterial(r))}configureEffectCompositer(e=ac.Default,t=!1){this.firstFrame();let r={...aa};e===ac.Log?r.fragmentShader="#define LOGDEPTH\n"+r.fragmentShader:e===ac.Reverse&&(r.fragmentShader="#define REVERSEDEPTH\n"+r.fragmentShader),t&&(r.fragmentShader="#define ORTHO\n"+r.fragmentShader),this.configuration.halfRes&&this.configuration.depthAwareUpsampling&&(r.fragmentShader="#define HALFRES\n"+r.fragmentShader),this.effectCompositerQuad?(this.effectCompositerQuad.material.dispose(),this.effectCompositerQuad.material=new r3.ShaderMaterial(r)):this.effectCompositerQuad=new at(new r3.ShaderMaterial(r))}generateHemisphereSamples(e){let t=[];for(let r=0;r<e;r++){let a=2.399963*r,i=Math.sqrt(r+.5)/Math.sqrt(e),s=i*Math.cos(a),n=i*Math.sin(a),o=Math.sqrt(1-(s*s+n*n));t.push(new r3.Vector3(s,n,o))}return t}generateDenoiseSamples(e,t){let r=2*Math.PI*t/e,a=1/e,i=[],s=a,n=0;for(let t=0;t<e;t++)i.push(new r3.Vector2(Math.cos(n),Math.sin(n)).multiplyScalar(Math.pow(s,.75))),s+=a,n+=r;return i}setSize(e,t){this.firstFrame(),this.width=e,this.height=t;let r=this.configuration.halfRes?.5:1;this.writeTargetInternal.setSize(e*r,t*r),this.readTargetInternal.setSize(e*r,t*r),this.accumulationRenderTarget.setSize(e*r,t*r),this.configuration.halfRes&&this.depthDownsampleTarget.setSize(e*r,t*r),this.configuration.transparencyAware&&(this.transparencyRenderTargetDWFalse.setSize(e,t),this.transparencyRenderTargetDWTrue.setSize(e,t)),this.outputTargetInternal.setSize(e,t)}setDepthTexture(e){this.depthTexture=e}firstFrame(){this.needsFrame=!0}render(e,t,r){let a,i,s,n=e.xr.enabled;e.xr.enabled=!1,(e.capabilities.logarithmicDepthBuffer&&this.configuration.depthBufferType!==ac.Log||e.capabilities.reverseDepthBuffer&&this.configuration.depthBufferType!==ac.Reverse)&&(this.configuration.depthBufferType=e.capabilities.logarithmicDepthBuffer?ac.Log:e.capabilities.reverseDepthBuffer?ac.Reverse:ac.Default,this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera)),this.detectTransparency(),(t.texture.type!==this.outputTargetInternal.texture.type||t.texture.format!==this.outputTargetInternal.texture.format)&&(this.outputTargetInternal.texture.type=t.texture.type,this.outputTargetInternal.texture.format=t.texture.format,this.outputTargetInternal.texture.needsUpdate=!0),this.camera.updateMatrixWorld(),this.lastViewMatrix.equals(this.camera.matrixWorldInverse)&&this.lastProjectionMatrix.equals(this.camera.projectionMatrix)&&this.configuration.accumulate&&!this.needsFrame?this.frame++:(this.configuration.accumulate&&(e.setRenderTarget(this.accumulationRenderTarget),e.clear(!0,!0,!0)),this.frame=0,this.needsFrame=!1),this.lastViewMatrix.copy(this.camera.matrixWorldInverse),this.lastProjectionMatrix.copy(this.camera.projectionMatrix),this.debugMode&&null===(i=(a=e.getContext()).getExtension("EXT_disjoint_timer_query_webgl2"))&&(console.error("EXT_disjoint_timer_query_webgl2 not available, disabling debug mode."),this.debugMode=!1),this.debugMode&&(s=a.createQuery(),a.beginQuery(i.TIME_ELAPSED_EXT,s)),this.configuration.transparencyAware&&this.renderTransparency(e),this._r.set(this.width,this.height);let o=this.configuration.aoRadius;if(this.configuration.halfRes&&this.configuration.screenSpaceRadius&&(o*=.5),this.frame<1024/this.configuration.aoSamples){this.configuration.halfRes&&(e.setRenderTarget(this.depthDownsampleTarget),this.depthDownsampleQuad.material.uniforms.sceneDepth.value=this.depthTexture,this.depthDownsampleQuad.material.uniforms.resolution.value=this._r,this.depthDownsampleQuad.material.uniforms.near.value=this.camera.near,this.depthDownsampleQuad.material.uniforms.far.value=this.camera.far,this.depthDownsampleQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.depthDownsampleQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.depthDownsampleQuad.material.uniforms.logDepth.value=this.configuration.logarithmicDepthBuffer,this.depthDownsampleQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.depthDownsampleQuad.render(e)),this.effectShaderQuad.material.uniforms.sceneDiffuse.value=t.texture,this.effectShaderQuad.material.uniforms.sceneDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.depthTexture,this.effectShaderQuad.material.uniforms.sceneNormal.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[1]:null,this.effectShaderQuad.material.uniforms.projMat.value=this.camera.projectionMatrix,this.effectShaderQuad.material.uniforms.viewMat.value=this.camera.matrixWorldInverse,this.effectShaderQuad.material.uniforms.projViewMat.value=this.camera.projectionMatrix.clone().multiply(this.camera.matrixWorldInverse.clone()),this.effectShaderQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.effectShaderQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.effectShaderQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new r3.Vector3),this.effectShaderQuad.material.uniforms.biasAdjustment.value=new r3.Vector2(this.configuration.biasOffset,this.configuration.biasMultiplier),this.effectShaderQuad.material.uniforms.resolution.value=this.configuration.halfRes?this._r.clone().multiplyScalar(.5).floor():this._r,this.effectShaderQuad.material.uniforms.time.value=performance.now()/1e3,this.effectShaderQuad.material.uniforms.samples.value=this.samples,this.effectShaderQuad.material.uniforms.bluenoise.value=this.bluenoise,this.effectShaderQuad.material.uniforms.radius.value=o,this.effectShaderQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.effectShaderQuad.material.uniforms.near.value=this.camera.near,this.effectShaderQuad.material.uniforms.far.value=this.camera.far,this.effectShaderQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.effectShaderQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,this.effectShaderQuad.material.uniforms.frame.value=this.frame,e.setRenderTarget(this.writeTargetInternal),this.effectShaderQuad.render(e);for(let t=0;t<this.configuration.denoiseIterations;t++)[this.writeTargetInternal,this.readTargetInternal]=[this.readTargetInternal,this.writeTargetInternal],this.poissonBlurQuad.material.uniforms.tDiffuse.value=this.readTargetInternal.texture,this.poissonBlurQuad.material.uniforms.sceneDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.depthTexture,this.poissonBlurQuad.material.uniforms.projMat.value=this.camera.projectionMatrix,this.poissonBlurQuad.material.uniforms.viewMat.value=this.camera.matrixWorldInverse,this.poissonBlurQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.poissonBlurQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.poissonBlurQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new r3.Vector3),this.poissonBlurQuad.material.uniforms.resolution.value=this.configuration.halfRes?this._r.clone().multiplyScalar(.5).floor():this._r,this.poissonBlurQuad.material.uniforms.time.value=performance.now()/1e3,this.poissonBlurQuad.material.uniforms.blueNoise.value=this.bluenoise,this.poissonBlurQuad.material.uniforms.radius.value=this.configuration.denoiseRadius*(this.configuration.halfRes?.5:1),this.poissonBlurQuad.material.uniforms.worldRadius.value=o,this.poissonBlurQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.poissonBlurQuad.material.uniforms.index.value=t,this.poissonBlurQuad.material.uniforms.poissonDisk.value=this.samplesDenoise,this.poissonBlurQuad.material.uniforms.near.value=this.camera.near,this.poissonBlurQuad.material.uniforms.far.value=this.camera.far,this.poissonBlurQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,e.setRenderTarget(this.writeTargetInternal),this.poissonBlurQuad.render(e);e.setRenderTarget(this.accumulationRenderTarget);let r=e.autoClear;e.autoClear=!1,this.accumulationQuad.material.uniforms.tDiffuse.value=this.writeTargetInternal.texture,this.accumulationQuad.material.uniforms.frame.value=this.frame,this.accumulationQuad.render(e),e.autoClear=r}this.configuration.transparencyAware&&(this.effectCompositerQuad.material.uniforms.transparencyDWFalse.value=this.transparencyRenderTargetDWFalse.texture,this.effectCompositerQuad.material.uniforms.transparencyDWTrue.value=this.transparencyRenderTargetDWTrue.texture,this.effectCompositerQuad.material.uniforms.transparencyDWTrueDepth.value=this.transparencyRenderTargetDWTrue.depthTexture,this.effectCompositerQuad.material.uniforms.transparencyAware.value=!0),this.effectCompositerQuad.material.uniforms.sceneDiffuse.value=t.texture,this.effectCompositerQuad.material.uniforms.sceneDepth.value=this.depthTexture,this.effectCompositerQuad.material.uniforms.aoTones.value=this.configuration.aoTones,this.effectCompositerQuad.material.uniforms.near.value=this.camera.near,this.effectCompositerQuad.material.uniforms.far.value=this.camera.far,this.effectCompositerQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.effectCompositerQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.effectCompositerQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.effectCompositerQuad.material.uniforms.downsampledDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.depthTexture,this.effectCompositerQuad.material.uniforms.resolution.value=this._r,this.effectCompositerQuad.material.uniforms.blueNoise.value=this.bluenoise,this.effectCompositerQuad.material.uniforms.intensity.value=this.configuration.intensity,this.effectCompositerQuad.material.uniforms.renderMode.value=this.configuration.renderMode,this.effectCompositerQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,this.effectCompositerQuad.material.uniforms.radius.value=o,this.effectCompositerQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.effectCompositerQuad.material.uniforms.gammaCorrection.value=this.autosetGamma?this.renderToScreen:this.configuration.gammaCorrection,this.effectCompositerQuad.material.uniforms.tDiffuse.value=this.accumulationRenderTarget.texture,this.effectCompositerQuad.material.uniforms.color.value=this._c.copy(this.configuration.color).convertSRGBToLinear(),this.effectCompositerQuad.material.uniforms.colorMultiply.value=this.configuration.colorMultiply,this.effectCompositerQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new r3.Vector3),this.effectCompositerQuad.material.uniforms.fog.value=!!this.scene.fog,this.scene.fog&&(this.scene.fog.isFog?(this.effectCompositerQuad.material.uniforms.fogExp.value=!1,this.effectCompositerQuad.material.uniforms.fogNear.value=this.scene.fog.near,this.effectCompositerQuad.material.uniforms.fogFar.value=this.scene.fog.far):this.scene.fog.isFogExp2?(this.effectCompositerQuad.material.uniforms.fogExp.value=!0,this.effectCompositerQuad.material.uniforms.fogDensity.value=this.scene.fog.density):console.error(`Unsupported fog type ${this.scene.fog.constructor.name} in SSAOPass.`)),e.setRenderTarget(this.outputTargetInternal),this.effectCompositerQuad.render(e),e.setRenderTarget(this.renderToScreen?null:r),this.copyQuad.material.uniforms.tDiffuse.value=this.outputTargetInternal.texture,this.copyQuad.render(e),this.debugMode&&(a.endQuery(i.TIME_ELAPSED_EXT),function e(t,r,a){if(r.getQueryParameter(t,r.QUERY_RESULT_AVAILABLE)){let e=r.getQueryParameter(t,r.QUERY_RESULT)/1e6;a.lastTime=0===a.lastTime?e:a.timeRollingAverage*a.lastTime+(1-a.timeRollingAverage)*e}else setTimeout(()=>{e(t,r,a)},1)}(s,a,this)),e.xr.enabled=n}enableDebugMode(){this.debugMode=!0}disableDebugMode(){this.debugMode=!1}setDisplayMode(e){this.configuration.renderMode=["Combined","AO","No AO","Split","Split AO"].indexOf(e)}setQualityMode(e){"Performance"===e?(this.configuration.aoSamples=8,this.configuration.denoiseSamples=4,this.configuration.denoiseRadius=12):"Low"===e?(this.configuration.aoSamples=16,this.configuration.denoiseSamples=4,this.configuration.denoiseRadius=12):"Medium"===e?(this.configuration.aoSamples=16,this.configuration.denoiseSamples=8,this.configuration.denoiseRadius=12):"High"===e?(this.configuration.aoSamples=64,this.configuration.denoiseSamples=8,this.configuration.denoiseRadius=6):"Ultra"===e&&(this.configuration.aoSamples=64,this.configuration.denoiseSamples=16,this.configuration.denoiseRadius=6)}}let ac={Default:1,Log:2,Reverse:3},au=(0,G.createContext)(null),af=e=>(2&e.getAttributes())==2,ad=(0,G.memo)((0,G.forwardRef)(({children:e,camera:t,scene:r,resolutionScale:a,enabled:i=!0,renderPriority:s=1,autoClear:n=!0,depthBuffer:o,enableNormalPass:l,stencilBuffer:c,multisampling:u=8,frameBufferType:f=ez.HalfFloatType},d)=>{let{gl:h,scene:p,camera:m,size:g}=(0,k.useThree)(),v=r||p,x=t||m,[A,D,w]=(0,G.useMemo)(()=>{let e=new e2(h,{depthBuffer:o,stencilBuffer:c,multisampling:u,frameBufferType:f});e.addPass(new tR(v,x));let t=null,r=null;return l&&((r=new ry(v,x)).enabled=!1,e.addPass(r),void 0!==a&&((t=new rt({normalBuffer:r.texture,resolutionScale:a})).enabled=!1,e.addPass(t))),[e,r,t]},[x,h,o,c,u,f,v,l,a]);(0,G.useEffect)(()=>A?.setSize(g.width,g.height),[A,g]),(0,ef.useFrame)((e,t)=>{if(i){let e=h.autoClear;h.autoClear=n,c&&!n&&h.clearStencil(),A.render(t),h.autoClear=e}},i?s:0);let S=(0,G.useRef)(null);(0,G.useLayoutEffect)(()=>{let e=[],t=S.current.__r3f;if(t&&A){let r=t.children;for(let t=0;t<r.length;t++){let a=r[t].object;if(a instanceof tt){let i=[a];if(!af(a)){let e=null;for(;(e=r[t+1]?.object)instanceof tt&&!af(e);)i.push(e),t++}let s=new rS(x,...i);e.push(s)}else a instanceof eW&&e.push(a)}for(let t of e)A?.addPass(t);D&&(D.enabled=!0),w&&(w.enabled=!0)}return()=>{for(let t of e)A?.removePass(t);D&&(D.enabled=!1),w&&(w.enabled=!1)}},[A,e,x,D,w]),(0,G.useEffect)(()=>{let e=h.toneMapping;return h.toneMapping=ez.NoToneMapping,()=>{h.toneMapping=e}},[h]);let y=(0,G.useMemo)(()=>({composer:A,normalPass:D,downSamplingPass:w,resolutionScale:a,camera:x,scene:v}),[A,D,w,a,x,v]);return(0,G.useImperativeHandle)(d,()=>A,[A]),(0,I.jsx)(au.Provider,{value:y,children:(0,I.jsx)("group",{ref:S,children:e})})})),ah=0,ap=new WeakMap,am=(e,t)=>function({blendFunction:r=t?.blendFunction,opacity:a=t?.opacity,...i}){let s=ap.get(e);if(!s){let t=`@react-three/postprocessing/${e.name}-${ah++}`;(0,ek.extend)({[t]:e}),ap.set(e,s=t)}let n=(0,k.useThree)(e=>e.camera),o=G.default.useMemo(()=>[...t?.args??[],...i.args??[{...t,...i}]],[JSON.stringify(i)]);return(0,I.jsx)(s,{camera:n,"blendMode-blendFunction":r,"blendMode-opacity-value":a,...i,args:o})},ag=(0,G.forwardRef)(function({blendFunction:e,worldFocusDistance:t,worldFocusRange:r,focusDistance:a,focusRange:i,focalLength:s,bokehScale:n,resolutionScale:o,resolutionX:l,resolutionY:c,width:u,height:f,target:d,depthTexture:h,...p},m){let{camera:g}=(0,G.useContext)(au),v=null!=d,x=(0,G.useMemo)(()=>{let d=new tE(g,{blendFunction:e,worldFocusDistance:t,worldFocusRange:r,focusDistance:a,focusRange:i,focalLength:s,bokehScale:n,resolutionScale:o,resolutionX:l,resolutionY:c,width:u,height:f});return v&&(d.target=new ez.Vector3),h&&d.setDepthTexture(h.texture,h.packing),d.maskPass.maskFunction=2,d},[g,e,t,r,a,i,s,n,o,l,c,u,f,v,h]);return(0,G.useEffect)(()=>()=>{x.dispose()},[x]),(0,I.jsx)("primitive",{...p,ref:m,object:x,target:d})}),av=am(tm,{blendFunction:0}),ax=am(t3);var aA=((i=aA||{})[i.Linear=0]="Linear",i[i.Radial=1]="Radial",i[i.MirroredLinear=2]="MirroredLinear",i);let aD=am(rf),aw=`
|
|
1669
|
+
uniform sampler2D uCharacters;
|
|
1670
|
+
uniform float uCharactersCount;
|
|
1671
|
+
uniform float uCellSize;
|
|
1672
|
+
uniform bool uInvert;
|
|
1673
|
+
uniform vec3 uColor;
|
|
1674
|
+
|
|
1675
|
+
const vec2 SIZE = vec2(16.);
|
|
1676
|
+
|
|
1677
|
+
vec3 greyscale(vec3 color, float strength) {
|
|
1678
|
+
float g = dot(color, vec3(0.299, 0.587, 0.114));
|
|
1679
|
+
return mix(color, vec3(g), strength);
|
|
1680
|
+
}
|
|
1681
|
+
|
|
1682
|
+
vec3 greyscale(vec3 color) {
|
|
1683
|
+
return greyscale(color, 1.0);
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1687
|
+
vec2 cell = resolution / uCellSize;
|
|
1688
|
+
vec2 grid = 1.0 / cell;
|
|
1689
|
+
vec2 pixelizedUV = grid * (0.5 + floor(uv / grid));
|
|
1690
|
+
vec4 pixelized = texture2D(inputBuffer, pixelizedUV);
|
|
1691
|
+
float greyscaled = greyscale(pixelized.rgb).r;
|
|
1692
|
+
|
|
1693
|
+
if (uInvert) {
|
|
1694
|
+
greyscaled = 1.0 - greyscaled;
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
float characterIndex = floor((uCharactersCount - 1.0) * greyscaled);
|
|
1698
|
+
vec2 characterPosition = vec2(mod(characterIndex, SIZE.x), floor(characterIndex / SIZE.y));
|
|
1699
|
+
vec2 offset = vec2(characterPosition.x, -characterPosition.y) / SIZE;
|
|
1700
|
+
vec2 charUV = mod(uv * (cell / SIZE), 1.0 / SIZE) - vec2(0., 1.0 / SIZE) + offset;
|
|
1701
|
+
vec4 asciiCharacter = texture2D(uCharacters, charUV);
|
|
1702
|
+
|
|
1703
|
+
asciiCharacter.rgb = uColor * asciiCharacter.r;
|
|
1704
|
+
asciiCharacter.a = pixelized.a;
|
|
1705
|
+
outputColor = asciiCharacter;
|
|
1706
|
+
}
|
|
1707
|
+
`,aS=(0,G.forwardRef)(({halfRes:e,screenSpaceRadius:t,quality:r,depthAwareUpsampling:a=!0,aoRadius:i=5,aoSamples:s=16,denoiseSamples:n=4,denoiseRadius:o=12,distanceFalloff:l=1,intensity:c=1,color:u,renderMode:f=0},d)=>{let{camera:h,scene:p}=(0,k.useThree)(),m=(0,G.useMemo)(()=>new al(p,h),[h,p]);return(0,G.useLayoutEffect)(()=>{(0,L.applyProps)(m.configuration,{color:u,aoRadius:i,distanceFalloff:l,intensity:c,aoSamples:s,denoiseSamples:n,denoiseRadius:o,screenSpaceRadius:t,renderMode:f,halfRes:e,depthAwareUpsampling:a})},[t,u,i,l,c,s,n,o,f,e,a,m]),(0,G.useLayoutEffect)(()=>{r&&m.setQualityMode(r.charAt(0).toUpperCase()+r.slice(1))},[m,r]),(0,I.jsx)("primitive",{ref:d,object:m})});function ay({t3:e}){return(0,I.jsxs)(ad,{multisampling:0,children:[(0,I.jsx)(aS,{halfRes:!0,aoRadius:1.1,intensity:e.ao,distanceFalloff:1,quality:"medium"}),(0,I.jsx)(av,{mipmapBlur:!0,intensity:e.bloom,luminanceThreshold:1,luminanceSmoothing:.2,levels:7}),(0,I.jsx)(aD,{eskil:!1,offset:.26,darkness:e.vignette}),(0,I.jsx)(ax,{})]})}function aT({state:e,config:t,theme:r,botStyle:a}){let i=(0,V.useMemo)(()=>(0,W.computeFloorPlan)(e.agents,t),[e.agents,t]),s=i.W,n=i.D,o=(0,Y.getCribTheme)(r).three,l=.75*Math.max(s,n);return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Q,{size:16,samples:10,focus:.6}),(0,I.jsx)("ambientLight",{intensity:o.ambient}),(0,I.jsx)("hemisphereLight",{intensity:o.hemi,groundColor:o.hemiGround,color:"#ffffff"}),(0,I.jsx)("directionalLight",{position:[.4*s,13,8],intensity:o.dir,color:o.dirColor,castShadow:!0,"shadow-mapSize":[2048,2048],"shadow-bias":-4e-4,"shadow-normalBias":.03,"shadow-camera-left":-l,"shadow-camera-right":l,"shadow-camera-top":l,"shadow-camera-bottom":-l,"shadow-camera-near":1,"shadow-camera-far":45}),o.dirWest>0?(0,I.jsx)("directionalLight",{position:[-(.5*s+8),12.5,2],intensity:o.dirWest,color:o.dirWestColor,castShadow:!0,"shadow-mapSize":[4096,4096],"shadow-bias":-4e-4,"shadow-normalBias":.012,"shadow-camera-left":-(.55*Math.max(s,n)),"shadow-camera-right":.55*Math.max(s,n),"shadow-camera-top":.55*Math.max(s,n),"shadow-camera-bottom":-(.55*Math.max(s,n)),"shadow-camera-near":1,"shadow-camera-far":50}):null,(0,I.jsxs)(F.Environment,{resolution:256,frames:1,children:[(0,I.jsx)("color",{attach:"background",args:[o.envBg]}),(0,I.jsx)(N,{form:"rect",intensity:o.envCeiling,position:[0,9,0],rotation:[Math.PI/2,0,0],scale:[Math.max(s,n),Math.max(s,n),1],color:"#ffffff"}),(0,I.jsx)(N,{form:"rect",intensity:o.envWindow,position:[0,3.2,-(.5*n)],scale:[s,4.5,1],color:"dark"===r?"#9fb4d8":"#eef4ff"}),(0,I.jsx)(N,{form:"rect",intensity:o.envWindow,position:[.5*s,3.2,0],rotation:[0,-Math.PI/2,0],scale:[n,4.5,1],color:"dark"===r?"#9fb4d8":"#eef4ff"}),(0,I.jsx)(N,{form:"rect",intensity:o.envWarm,position:[-(.5*s),3,0],rotation:[0,Math.PI/2,0],scale:[n,4.5,1],color:"#fff0dc"}),(0,I.jsx)(N,{form:"rect",intensity:.8*o.envWindow,position:[-(.5*s),5.45,0],rotation:[0,Math.PI/2,0],scale:[n,1.55,1],color:"dark"===r?"#9fb4d8":"#eef4ff"})]}),(0,I.jsx)(eo,{plan:i,t3:o,theme:r}),(0,I.jsx)(eP,{plan:i,tasks:e.tasks,agents:e.agents}),(0,I.jsx)(R.ContactShadows,{position:[0,.02,0],opacity:.6*o.contactOpacity,scale:1.25*Math.max(s,n),blur:2.6,far:5}),(0,I.jsx)(eM,{plan:i,t3:o,deskChairs:!1}),(0,I.jsx)(eH,{plan:i,botStyle:a}),(0,I.jsx)(ay,{t3:o}),(0,I.jsx)(H.OrbitControls,{makeDefault:!0,enablePan:!0,screenSpacePanning:!1,enableDamping:!0,dampingFactor:.08,minPolarAngle:.15,maxPolarAngle:Math.PI/2.15,minDistance:5,maxDistance:Math.max(36,1.7*Math.max(s,n)),target:aM})]})}class aC extends V.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?this.props.fallback(()=>this.setState({failed:!1})):this.props.children}}let aB={type:O.PCFShadowMap},aE={position:[12,6.2,8],fov:44},aM=[-5.5,3.3,-1];function ab({fails:e,onRetry:t,notice:r}){let a=e<=3;return((0,V.useEffect)(()=>{if(!a)return;let r=setTimeout(t,600*e);return()=>clearTimeout(r)},[a,e,t]),a)?(0,I.jsx)(I.Fragment,{children:r("Restarting the 3D office…")}):(0,I.jsx)(I.Fragment,{children:r("The browser lost its WebGL context and the 3D office couldn’t recover on its own.",t)})}function aI({state:e,config:t,theme:r,botStyle:a=K.DEFAULT_BOT_STYLE}){let[i,s]=(0,V.useState)(null),[n,o]=(0,V.useState)(0),[l,c]=(0,V.useState)(0);(0,V.useEffect)(()=>{let e=requestAnimationFrame(()=>s(function(){try{let e=document.createElement("canvas");return!!(window.WebGLRenderingContext&&(e.getContext("webgl2")||e.getContext("webgl")))}catch{return!1}}()));return()=>cancelAnimationFrame(e)},[n]),(0,V.useEffect)(()=>{if(0===l)return;let e=setTimeout(()=>c(0),2e4);return()=>clearTimeout(e)},[n,l]);let u=(0,Y.getCribTheme)(r).three,f=(0,V.useMemo)(()=>({toneMappingExposure:u.exposure}),[u.exposure]),d=(e,t)=>(0,I.jsx)("div",{className:"flex h-full w-full items-center justify-center",style:{background:(0,Y.getCribTheme)(r).pageBg},children:(0,I.jsxs)("div",{className:"max-w-sm text-center text-sm text-white/55",children:[e,(0,I.jsx)("br",{}),"Switch to the Plan view (top-right) to keep watching the floor.",t?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)("br",{}),(0,I.jsx)("button",{onClick:t,className:"mt-3 rounded-full border border-white/15 bg-white/10 px-4 py-1.5 text-white/80 transition-colors hover:text-white",children:"Retry 3D"})]}):null]})});return!1===i?d("WebGL isn’t available in this browser, so the 3D office can’t render."):(0,I.jsx)(aC,{fallback:e=>(0,I.jsx)(ab,{fails:l+1,notice:d,onRetry:()=>{c(e=>e+1),e(),o(e=>e+1)}}),children:(0,I.jsxs)(P.Canvas,{shadows:aB,dpr:[1,1.5],camera:aE,gl:f,style:{background:u.bgCss},onCreated:({gl:e})=>{e.domElement.addEventListener("webglcontextlost",e=>{e.preventDefault(),o(e=>e+1)})},children:[(0,I.jsx)("fog",{attach:"fog",args:[u.fog,u.fogNear,u.fogFar]}),(0,I.jsx)(aT,{state:e,config:t,theme:r,botStyle:a})]},n)})}e.s(["default",()=>aI],64973)},52149,e=>{e.n(e.i(64973))}]);
|