commit dfa519cc4f396c1706a1fb5d1c33e163d4123404 Author: Jordan Prince Date: Wed Jun 2 09:35:28 2021 -0500 New frontend only diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3dce414 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..38d404c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: cargo + directory: "/" + schedule: + interval: daily + time: "04:00" + timezone: America/Los_Angeles + labels: + - "automerge" + open-pull-requests-limit: 3 + ignore: + - dependency-name: "cbindgen" diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 0000000..c884585 --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,134 @@ +name: Pull Request + +defaults: + run: + working-directory: ./rust + +on: + pull_request: + push: + branches: [master] + +jobs: + all_github_action_checks: + runs-on: ubuntu-latest + needs: + - rustfmt + - clippy + - cargo-build-test + steps: + - run: echo "Done" + working-directory: ./ + + rustfmt: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set env vars + run: | + source ci/rust-version.sh + echo "RUST_STABLE=$rust_stable" >> $GITHUB_ENV + + - uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ env.RUST_STABLE }} + override: true + profile: minimal + components: rustfmt + + - name: Run fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --manifest-path ./rust/Cargo.toml --all -- --check + + clippy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set env vars + run: | + source ci/rust-version.sh + echo "RUST_NIGHTLY=$rust_nightly" >> $GITHUB_ENV + + - uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ env.RUST_NIGHTLY }} + override: true + profile: minimal + components: clippy + + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: cargo-clippy-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + cargo-clippy- + + - name: Install dependencies + run: ./ci/install-build-deps.sh + + - name: Run clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path ./rust/Cargo.toml -Zunstable-options --workspace --all-targets -- --deny=warnings + + cargo-build-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set env vars + run: | + source ci/rust-version.sh + echo "RUST_STABLE=$rust_stable" >> $GITHUB_ENV + source ci/solana-version.sh + echo "SOLANA_VERSION=$solana_version" >> $GITHUB_ENV + + - uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ env.RUST_STABLE }} + override: true + profile: minimal + + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + # target # Removed due to build dependency caching conflicts + key: cargo-build-${{ hashFiles('**/Cargo.lock') }}-${{ env.RUST_STABLE}} + + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/rustfilt + key: cargo-bpf-bins-${{ runner.os }} + + - uses: actions/cache@v2 + with: + path: | + ~/.cache + key: solana-${{ env.SOLANA_VERSION }} + + - name: Install dependencies + run: | + ./ci/install-build-deps.sh + ./ci/install-program-deps.sh + echo "$HOME/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH + + - name: Build and test + run: ./ci/cargo-build-test.sh + + - name: Upload programs + uses: actions/upload-artifact@v2 + with: + name: programs + path: "rust/target/deploy/*.so" + if-no-files-found: error diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..56d96cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +node_modules/ +build/ +dist/ +lib/ +deploy/ +docs/lockup-ui/ +.DS_Store +*~ +.idea +npm-debug.log* +yarn-debug.log* +yarn-error.log* +*.css +*.css.map +!js/packages/metaplex/src/fonts/fonts.css +!js/packages/metaplex/src/utils/globals.css +target +.env +.vscode +bin +config.json +node_modules +./package-lock.json +hfuzz_target +hfuzz_workspace +**/*.so +**/.DS_Store diff --git a/.mergify.yml b/.mergify.yml new file mode 100644 index 0000000..7b845b8 --- /dev/null +++ b/.mergify.yml @@ -0,0 +1,39 @@ +# Validate your changes with: +# +# $ curl -F 'data=@.mergify.yml' https://gh.mergify.io/validate/ +# +# https://doc.mergify.io/ +pull_request_rules: + - name: automatic merge (squash) on CI success + conditions: + - check-success=all_github_action_checks + - label=automerge + - author≠@dont-squash-my-commits + actions: + merge: + method: squash + # Join the dont-squash-my-commits group if you won't like your commits squashed + - name: automatic merge (rebase) on CI success + conditions: + - check-success=all_github_action_checks + - label=automerge + - author=@dont-squash-my-commits + actions: + merge: + method: rebase + - name: remove automerge label on CI failure + conditions: + - label=automerge + - "#status-failure!=0" + actions: + label: + remove: + - automerge + comment: + message: automerge label removed due to a CI failure + - name: remove outdated reviews + conditions: + - base=master + actions: + dismiss_reviews: + changes_requested: true diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..e69de29 diff --git a/.travis/affects.sh b/.travis/affects.sh new file mode 100755 index 0000000..0d6bf38 --- /dev/null +++ b/.travis/affects.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# +# Check if files in the commit range match one or more prefixes +# + +( + set -x + git diff --name-only "$TRAVIS_COMMIT_RANGE" +) + +for file in $(git diff --name-only "$TRAVIS_COMMIT_RANGE"); do + for prefix in "$@"; do + if [[ $file =~ ^"$prefix" ]]; then + exit 0 + fi + done +done + +echo "No modifications to $*" +exit 1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b223be5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d709259 --- /dev/null +++ b/README.md @@ -0,0 +1,114 @@ +

+ + Metaplex + +

+ +Metaplex is a protocol built on top of Solana that allows: + +- **Creating/Minting** non-fungible tokens; +- **Starting** a variety of auctions for primary/secondary sales; +- and **Visualizing** NFTs in a standard way across wallets and applications. + +Metaplex is comprised of two core components: an on-chain program, and a self-hosted front-end web2 application. + +## Installing + +Clone the repo, and run `deploy-web.sh`. + +```bash +$ git clone https://github.com/metaplex-foundation/metaplex.git +$ cd metaplex +$ cd js +$ ./deploy-web.sh +``` + +## Community + +We have a few channels for contact: + +- [Discord](https://discord.gg/metaplex) +- [@metaplex\_](https://twitter.com/metaplex_) on Twitter +- [GitHub Issues](https://github.com/metaplex-foundation/metaplex/issues) + +# Protocol + +## Non-fungible tokens + +Metaplex's non-fungible-token standard is a part of the Solana Program Library (SPL), and can be characterized as a unique token with a fixed supply of 1 and 0 decimals. We extended the basic definition of an NFT on Solana to include additional metadata such as URI as defined in ERC-721 on Ethereum. + +Below are the types of NFTs that can be created using the Metaplex protocol. + +### **Master Edition** + +A master edition token, when minted, represents both a non-fungible token on Solana and metadata that allows creators to control the provenance of prints created from the master edition. + +Rights to create prints are tokenized itself, and the owner of the master edition can distribute tokens that allow users to create prints from master editions. Additionally, the creator can set the max supply of the master edition just like a regular mint on Solana, with the main difference being that each print is a numbered edition created from it. + +A notable and desirable effect of master editions is that as prints are sold, the artwork will still remain visible in the artist's wallet as a master edition, while the prints appear in the purchaser's wallets. + +### **Print** + +A **print** represents a copy of an NFT, and is created from a Master Edition. Each print has an edition number associated with it. + +Usually, prints are created as a part of an auction that has happened on Metaplex, but they could also be created by the creator manually. + +For limited auctions, each print number is awarded based on the bid placement. + +Prints can be created during [Open Edition](#open-edition) or [Limited Edition](#limited-edition) auction. + +### Normal NFT + +A normal NFT (like a Master Edition) when minted represents a non-fungible token on Solana and metadata, but lacks rights to print. + +An example of a normal NFT would be an artwork that is a one-of-a-kind that, once sold, is no longer within the artist's own wallet, but is in the purchaser's wallet. + +## Types of Auctions + +Metaplex currently supports four types of auctions that are all derived from English auctions. + +Basic parameters include: + +- Auction start time +- Auction end time +- Reservation price + +Additionally, Metaplex includes a novel concept of the participation NFT. Each bidding participant can be rewarded a unique NFT for participating in the auction. + +The creator of an auction also has the ability to configure a minimal price that should be charged for redemption, with the option to set it as "free". + +### Single Item + +This type of auction can be used to sell normal NFTs and re-sell Prints, as well as the sale of Master Edition themselves (and the associated printing rights) if the artist so wishes. While this last behavior is not exposed in the current UI, it does exist in the protocol. + +### Open Edition + +An open edition auction requires the offering of a Master Edition NFT that specifically has no set supply. The auction will only create Prints of this item for bidders: each bidder is guaranteed to get a print, as there are no true "winners" of this auction type. + +An open edition auction can either have a set fixed price (equivalent to a Buy Now sale), can be set to the bid price (Pay what you want), or can be free (Make any bid to get it for free). + +### Limited Edition + +For a limited edition auction, a Master Edition NFT (of limited or unlimited supply) may be provided to the auction with a number of copies as the set amount of winning places. + +For each prize place, a Print will be minted in order of prize place, and awarded to the winning bidder of that place. + +For example, the first place winner will win Print #1; the second place winner Print #2; and so on. + +It is required for limited supply NFTs that there is at least as much supply remaining as there are desired winners in the auction. + +### Tiered Auction + +A tiered auction can contain a mix of the other three auction types as winning placements. For instance, the first place winner could win a Print of Limited Edition NFT A, while the second-place winner could win Normal NFT, and so on. Additionally, all participants who did not win any place could get a Participation NFT Print from a Master Edition (if the Master Edition had no supply limit). + +## Royalties + +Metaplex can seamlessly create on-chain artist splits that remove the awkwardness out of collaboration. + +Tag each collaborator, set custom percentages, and you’re off to the races. Each NFT can also be minted with configurable royalty payments that are then sent automatically back to the original creators whenever an artwork is resold on a Metaplex marketplace in the future. + +## Storefronts + +Metaplex's off-chain component allows creators to launch a custom storefront, similar to Shopify or WordPress. This open-source project provides a graphical interface to the on-chain Metaplex program, for creators, buyers, and curators of NFTs. The design and layout of storefronts can be customized to suit the needs of the entity creating it, either as a permanent storefront or an auction hub for a specific auction or collection. + +All identification on the Storefront is based on wallet addresses. Creators and store admins sign through their wallets, and users place bids from connected wallets. Custom storefronts allow creators to create unique experiences per auction. Additionally, the Metaplex Foundation is working on multiple partnerships that will enable building immersive storefronts using VR/AR. diff --git a/js/README.md b/js/README.md new file mode 100644 index 0000000..24cf240 --- /dev/null +++ b/js/README.md @@ -0,0 +1,31 @@ +## Setup + +Be sure to be running Node v12.16.2 and yarn version 1.22.10. + +`yarn bootstrap` + +Then run: + +`yarn start` + +You may have to rebuild your package more than one time to secure a +running environment. + +## Known Issues + +### Can't find CSS files in common + +Common currently uses a less library to compile down less files into css in both the src directory for the TS server +in vscode to pick up and in the dist folder for importers like lending and proposal projects to pick up. If you do not see these files appear when running the `npm start lending` or other commands, and you see missing CSS errors, +you likely did not install the packages for common correctly. Try running: + +`lerna exec npm install --scope @oyster/common` to specifically install packages for common. + +Then, test that css transpiling is working: + +`lerna exec npm watch-css-src --scope @oyster/common` and verify css files appear next to their less counterparts in src. + +## ⚠️ Warning + +Any content produced by Solana, or developer resources that Solana provides, are for educational and inspiration purposes only. Solana does not encourage, induce or sanction the deployment of any such applications in violation of applicable laws or regulations. + diff --git a/js/assets/wallets/ledger.svg b/js/assets/wallets/ledger.svg new file mode 100644 index 0000000..feb6840 --- /dev/null +++ b/js/assets/wallets/ledger.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/js/assets/wallets/mathwallet.svg b/js/assets/wallets/mathwallet.svg new file mode 100644 index 0000000..588ace9 --- /dev/null +++ b/js/assets/wallets/mathwallet.svg @@ -0,0 +1,14 @@ + + + + Logo_Icon_White + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/js/assets/wallets/metamask.svg b/js/assets/wallets/metamask.svg new file mode 100644 index 0000000..a04dcfe --- /dev/null +++ b/js/assets/wallets/metamask.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/assets/wallets/solflare.svg b/js/assets/wallets/solflare.svg new file mode 100644 index 0000000..73352b8 --- /dev/null +++ b/js/assets/wallets/solflare.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/js/assets/wallets/sollet.svg b/js/assets/wallets/sollet.svg new file mode 100644 index 0000000..3440890 --- /dev/null +++ b/js/assets/wallets/sollet.svg @@ -0,0 +1,13 @@ + + + + background + + + + Layer 1 + + + + + \ No newline at end of file diff --git a/js/assets/wallets/solong.png b/js/assets/wallets/solong.png new file mode 100644 index 0000000..4ad3008 Binary files /dev/null and b/js/assets/wallets/solong.png differ diff --git a/js/assets/wallets/torus.svg b/js/assets/wallets/torus.svg new file mode 100644 index 0000000..1c0178e --- /dev/null +++ b/js/assets/wallets/torus.svg @@ -0,0 +1,19 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + diff --git a/js/assets/wallets/wormhole.svg b/js/assets/wallets/wormhole.svg new file mode 100644 index 0000000..aecd949 --- /dev/null +++ b/js/assets/wallets/wormhole.svg @@ -0,0 +1,3857 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/deploy-web.sh b/js/deploy-web.sh new file mode 100755 index 0000000..5f4f477 --- /dev/null +++ b/js/deploy-web.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +echo "Starting to deploy 'web', bootstrapping..." +yarn bootstrap +echo "Preparing 'common'..." +cd packages/common || exit +yarn prepare +yarn build-css +cd ../web || exit +echo "Prestarting 'web'..." +yarn prestart +echo "Building 'web'..." +# TODO: fix linting errors! +CI=false && yarn build +echo "#done" diff --git a/js/lerna.json b/js/lerna.json new file mode 100644 index 0000000..ee6a86a --- /dev/null +++ b/js/lerna.json @@ -0,0 +1,22 @@ +{ + "lerna": "3.4.3", + "version": "independent", + "packages": ["packages/*"], + "npmClient": "yarn", + "useWorkspaces": true, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "ignoreChanges": [ + "**/__tests__/**", + "**/*.md" + ], + "command": { + "publish": { + "conventionalCommits": true, + "allowBranch": ["master", "next"], + "message": "chore(release): Publish" + } + } +} diff --git a/js/package.json b/js/package.json new file mode 100644 index 0000000..a111040 --- /dev/null +++ b/js/package.json @@ -0,0 +1,77 @@ +{ + "private": true, + "workspaces": { + "packages": [ + "packages/*" + ] + }, + "keywords": [], + "license": "Apache-2.0", + "engines": { + "node": ">=6.0.0" + }, + "scripts": { + "bootstrap": "lerna link && lerna bootstrap", + "build": "lerna run build", + "start": "CI=true lerna run start --scope @oyster/common --stream --parallel --scope web", + "lint": "eslint 'packages/*/{src,test}/**/*.ts' && prettier -c 'packages/*/{src,test}/**/*.ts'", + "lint:fix": "eslint --fix 'packages/*/{src,test}/**/*.ts' && prettier --write 'packages/*/{src,test}/**/*.ts'", + "deploy": "run-s deploy:docs build deploy:apps && gh-pages -d docs", + "deploy:docs": "lerna run docs", + "deploy:apps": "lerna run deploy:app", + "test": "lerna run test --concurrency 1 --stream" + }, + "lint-staged": { + "packages/*/{src,test}/**/*.ts": [ + "prettier --write" + ] + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "prettier": { + "arrowParens": "avoid", + "semi": true, + "singleQuote": true, + "trailingComma": "all" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "dependencies": { + "react": "17.0.2", + "react-dom": "17.0.2" + }, + "devDependencies": { + "@commitlint/cli": "^8.2.0", + "@commitlint/config-conventional": "^8.2.0", + "@types/animejs": "^3.1.3", + "@types/jest": "^24.0.0", + "@types/react": "^16.9.50", + "@types/react-dom": "^16.9.8", + "@typescript-eslint/eslint-plugin": "^4.6.0", + "@typescript-eslint/parser": "^4.6.0", + "eslint": "^6.6.0", + "eslint-config-prettier": "^6.15.0", + "gh-pages": "^3.1.0", + "husky": "^4.3.0", + "jest": "24.9.0", + "jest-config": "24.9.0", + "lerna": "3.22.1", + "lint-staged": "^10.5.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.2", + "rimraf": "^3.0.2", + "ts-jest": "^24.0.0", + "ts-node": "^9.0.0", + "typescript": "^4.1.3" + }, + "resolutions": { + "react": "17.0.2", + "react-dom": "17.0.2" + } +} diff --git a/js/packages/common/package.json b/js/packages/common/package.json new file mode 100644 index 0000000..77f1d4a --- /dev/null +++ b/js/packages/common/package.json @@ -0,0 +1,80 @@ +{ + "name": "@oyster/common", + "version": "0.0.1", + "description": "Oyster common utilities", + "main": "dist/lib/index.js", + "types": "dist/lib/index.d.ts", + "exports": { + ".": "./dist/lib/" + }, + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "build": "tsc", + "build-css": "less-watch-compiler src/ dist/lib/ --run-once", + "start": "npm-run-all --parallel watch watch-css watch-css-src", + "watch-css": "less-watch-compiler src/ dist/lib/", + "watch-css-src": "less-watch-compiler src/ src/", + "watch": "tsc --watch", + "test": "jest test", + "clean": "rm -rf dist", + "prepare": "run-s clean build" + }, + "dependencies": { + "@project-serum/serum": "^0.13.34", + "@project-serum/sol-wallet-adapter": "^0.2.0", + "@solana/spl-token": "0.1.4", + "@solana/spl-token-swap": "0.1.0", + "@solana/wallet-base": "0.0.1", + "@solana/wallet-ledger": "0.0.1", + "@solana/web3.js": "^1.10.0", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.5.0", + "@testing-library/user-event": "^7.2.1", + "@types/chart.js": "^2.9.29", + "@types/echarts": "^4.9.0", + "@types/react-router-dom": "^5.1.6", + "@welldone-software/why-did-you-render": "^6.0.5", + "antd": "^4.6.6", + "bignumber.js": "^9.0.1", + "bn.js": "^5.1.3", + "borsh": "^0.4.0", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.0", + "eventemitter3": "^4.0.7", + "identicon.js": "^2.3.3", + "jazzicon": "^1.5.0", + "lodash": "^4.17.20", + "react": "17.0.2", + "react-dom": "17.0.2", + "typescript": "^4.1.3" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/bs58": "^4.0.1", + "@types/identicon.js": "^2.3.0", + "@types/jest": "^24.9.1", + "@types/node": "^12.12.62", + "arweave-deploy": "^1.9.1", + "gh-pages": "^3.1.0", + "less": "^4.1.1", + "less-watch-compiler": "v1.14.6", + "prettier": "^2.1.2" + }, + "files": [ + "dist" + ], + "peerDependencies": { + "react": "*", + "react-dom": "*" + }, + "resolutions": { + "react": "17.0.2", + "react-dom": "17.0.2" + } +} diff --git a/js/packages/common/src/actions/account.ts b/js/packages/common/src/actions/account.ts new file mode 100644 index 0000000..1d7284c --- /dev/null +++ b/js/packages/common/src/actions/account.ts @@ -0,0 +1,333 @@ +import { AccountLayout, MintLayout, Token } from '@solana/spl-token'; +import { + Keypair, + PublicKey, + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { + programIds, + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + TOKEN_PROGRAM_ID, + WRAPPED_SOL_MINT, +} from '../utils/ids'; +import { TokenAccount } from '../models/account'; +import { cache, TokenAccountParser } from '../contexts/accounts'; + +export function ensureSplAccount( + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + toCheck: TokenAccount, + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + if (!toCheck.info.isNative) { + return toCheck.pubkey; + } + + const account = createUninitializedAccount( + instructions, + payer, + amount, + signers, + ); + + instructions.push( + Token.createInitAccountInstruction( + TOKEN_PROGRAM_ID, + WRAPPED_SOL_MINT, + account, + payer, + ), + ); + + cleanupInstructions.push( + Token.createCloseAccountInstruction( + TOKEN_PROGRAM_ID, + account, + payer, + payer, + [], + ), + ); + + return account; +} + +export const DEFAULT_TEMP_MEM_SPACE = 65548; + +export function createTempMemoryAccount( + instructions: TransactionInstruction[], + payer: PublicKey, + signers: Keypair[], + owner: PublicKey, + space = DEFAULT_TEMP_MEM_SPACE, +) { + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + // 0 will evict/close account since it cannot pay rent + lamports: 0, + space: space, + programId: owner, + }), + ); + + signers.push(account); + + return account.publicKey; +} + +export function createUninitializedMint( + instructions: TransactionInstruction[], + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + lamports: amount, + space: MintLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + signers.push(account); + + return account.publicKey; +} + +export function createUninitializedAccount( + instructions: TransactionInstruction[], + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + lamports: amount, + space: AccountLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + signers.push(account); + + return account.publicKey; +} + +export function createAssociatedTokenAccountInstruction( + instructions: TransactionInstruction[], + associatedTokenAddress: PublicKey, + payer: PublicKey, + walletAddress: PublicKey, + splTokenMintAddress: PublicKey, +) { + const keys = [ + { + pubkey: payer, + isSigner: true, + isWritable: true, + }, + { + pubkey: associatedTokenAddress, + isSigner: false, + isWritable: true, + }, + { + pubkey: walletAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: splTokenMintAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + data: Buffer.from([]), + }), + ); +} + +export function createMint( + instructions: TransactionInstruction[], + payer: PublicKey, + mintRentExempt: number, + decimals: number, + owner: PublicKey, + freezeAuthority: PublicKey, + signers: Keypair[], +) { + const account = createUninitializedMint( + instructions, + payer, + mintRentExempt, + signers, + ); + + instructions.push( + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + account, + decimals, + owner, + freezeAuthority, + ), + ); + + return account; +} + +export function createTokenAccount( + instructions: TransactionInstruction[], + payer: PublicKey, + accountRentExempt: number, + mint: PublicKey, + owner: PublicKey, + signers: Keypair[], +) { + const account = createUninitializedAccount( + instructions, + payer, + accountRentExempt, + signers, + ); + + instructions.push( + Token.createInitAccountInstruction(TOKEN_PROGRAM_ID, mint, account, owner), + ); + + return account; +} + +export function ensureWrappedAccount( + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + toCheck: TokenAccount | undefined, + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + if (toCheck && !toCheck.info.isNative) { + return toCheck.pubkey; + } + + const TOKEN_PROGRAM_ID = programIds().token; + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + lamports: amount, + space: AccountLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + instructions.push( + Token.createInitAccountInstruction( + TOKEN_PROGRAM_ID, + WRAPPED_SOL_MINT, + account.publicKey, + payer, + ), + ); + + cleanupInstructions.push( + Token.createCloseAccountInstruction( + TOKEN_PROGRAM_ID, + account.publicKey, + payer, + payer, + [], + ), + ); + + signers.push(account); + + return account.publicKey; +} + +// TODO: check if one of to accounts needs to be native sol ... if yes unwrap it ... +export function findOrCreateAccountByMint( + payer: PublicKey, + owner: PublicKey, + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + accountRentExempt: number, + mint: PublicKey, // use to identify same type + signers: Keypair[], + excluded?: Set, +): PublicKey { + const accountToFind = mint.toBase58(); + const account = cache + .byParser(TokenAccountParser) + .map(id => cache.get(id)) + .find( + acc => + acc !== undefined && + acc.info.mint.toBase58() === accountToFind && + acc.info.owner.toBase58() === owner.toBase58() && + (excluded === undefined || !excluded.has(acc.pubkey.toBase58())), + ); + const isWrappedSol = accountToFind === WRAPPED_SOL_MINT.toBase58(); + + let toAccount: PublicKey; + if (account && !isWrappedSol) { + toAccount = account.pubkey; + } else { + // creating depositor pool account + toAccount = createTokenAccount( + instructions, + payer, + accountRentExempt, + mint, + owner, + signers, + ); + + if (isWrappedSol) { + cleanupInstructions.push( + Token.createCloseAccountInstruction( + TOKEN_PROGRAM_ID, + toAccount, + payer, + payer, + [], + ), + ); + } + } + + return toAccount; +} diff --git a/js/packages/common/src/actions/auction.ts b/js/packages/common/src/actions/auction.ts new file mode 100644 index 0000000..85eab0f --- /dev/null +++ b/js/packages/common/src/actions/auction.ts @@ -0,0 +1,954 @@ +import { + AccountInfo, + PublicKey, + SystemProgram, + SYSVAR_CLOCK_PUBKEY, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { programIds } from '../utils/ids'; +import { deserializeUnchecked, serialize } from 'borsh'; +import BN from 'bn.js'; +import { AccountParser } from '../contexts'; +import moment from 'moment'; +export const AUCTION_PREFIX = 'auction'; +export const METADATA = 'metadata'; +export const EXTENDED = 'extended'; + +export enum AuctionState { + Created = 0, + Started, + Ended, +} + +export enum BidStateType { + EnglishAuction = 0, + OpenEdition = 1, +} + +export class Bid { + key: PublicKey; + amount: BN; + constructor(args: { key: PublicKey; amount: BN }) { + this.key = args.key; + this.amount = args.amount; + } +} + +export class BidState { + type: BidStateType; + bids: Bid[]; + max: BN; + + public getWinnerIndex(bidder: PublicKey): number | null { + if (!this.bids) return null; + + const index = this.bids.findIndex( + b => b.key.toBase58() === bidder.toBase58(), + ); + // auction stores data in reverse order + if (index !== -1) { + const zeroBased = this.bids.length - index - 1; + return zeroBased < this.max.toNumber() ? zeroBased : null; + } else return null; + } + + constructor(args: { type: BidStateType; bids: Bid[]; max: BN }) { + this.type = args.type; + this.bids = args.bids; + this.max = args.max; + } +} + +export const AuctionParser: AccountParser = ( + pubkey: PublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeAuction(account.data), +}); + +export const decodeAuction = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + AuctionData, + buffer, + ) as AuctionData; +}; + +export const BidderPotParser: AccountParser = ( + pubkey: PublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeBidderPot(account.data), +}); + +export const decodeBidderPot = (buffer: Buffer) => { + return deserializeUnchecked(AUCTION_SCHEMA, BidderPot, buffer) as BidderPot; +}; + +export const BidderMetadataParser: AccountParser = ( + pubkey: PublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeBidderMetadata(account.data), +}); + +export const decodeBidderMetadata = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + BidderMetadata, + buffer, + ) as BidderMetadata; +}; + +export const BASE_AUCTION_DATA_SIZE = + 32 + 32 + 32 + 9 + 9 + 9 + 9 + 1 + 32 + 1 + 8 + 8; + +export enum PriceFloorType { + None = 0, + Minimum = 1, + BlindedPrice = 2, +} +export class PriceFloor { + type: PriceFloorType; + // It's an array of 32 u8s, when minimum, only first 4 are used (a u64), when blinded price, the entire + // thing is a hash and not actually a public key, and none is all zeroes + hash: PublicKey; + + constructor(args: { type: PriceFloorType; hash: PublicKey }) { + this.type = args.type; + this.hash = args.hash; + } +} + +export class AuctionDataExtended { + /// Total uncancelled bids + totalUncancelledBids: BN; + tickSize: BN | null; + gapTickSizePercentage: number | null; + + constructor(args: { + totalUncancelledBids: BN; + tickSize: BN | null; + gapTickSizePercentage: number | null; + }) { + this.totalUncancelledBids = args.totalUncancelledBids; + this.tickSize = args.tickSize; + this.gapTickSizePercentage = args.gapTickSizePercentage; + } +} + +export interface CountdownState { + days: number; + hours: number; + minutes: number; + seconds: number; +} + +export class AuctionData { + /// Pubkey of the authority with permission to modify this auction. + authority: PublicKey; + /// Token mint for the SPL token being used to bid + tokenMint: PublicKey; + /// The time the last bid was placed, used to keep track of auction timing. + lastBid: BN | null; + /// Slot time the auction was officially ended by. + endedAt: BN | null; + /// End time is the cut-off point that the auction is forced to end by. + endAuctionAt: BN | null; + /// Gap time is the amount of time in slots after the previous bid at which the auction ends. + auctionGap: BN | null; + /// Minimum price for any bid to meet. + priceFloor: PriceFloor; + /// The state the auction is in, whether it has started or ended. + state: AuctionState; + /// Auction Bids, each user may have one bid open at a time. + bidState: BidState; + /// Total uncancelled bids + totalUncancelledBids: BN; + /// Used for precalculation on the front end, not a backend key + bidRedemptionKey?: PublicKey; + + public timeToEnd(): CountdownState { + const now = moment().unix(); + const ended = { days: 0, hours: 0, minutes: 0, seconds: 0 }; + let endAt = this.endedAt?.toNumber() || 0; + + if (this.auctionGap && this.lastBid) { + endAt = Math.max( + endAt, + this.auctionGap.toNumber() + this.lastBid.toNumber(), + ); + } + + let delta = endAt - now; + + if (!endAt || delta <= 0) return ended; + + const days = Math.floor(delta / 86400); + delta -= days * 86400; + + const hours = Math.floor(delta / 3600) % 24; + delta -= hours * 3600; + + const minutes = Math.floor(delta / 60) % 60; + delta -= minutes * 60; + + const seconds = Math.floor(delta % 60); + + return { days, hours, minutes, seconds }; + } + + public ended() { + const now = moment().unix(); + if (!this.endedAt) return false; + + if (this.endedAt.toNumber() > now) return false; + + if (this.endedAt.toNumber() < now) { + if (this.auctionGap && this.lastBid) { + const newEnding = this.auctionGap.toNumber() + this.lastBid.toNumber(); + return newEnding < now; + } else return true; + } + } + + constructor(args: { + authority: PublicKey; + tokenMint: PublicKey; + lastBid: BN | null; + endedAt: BN | null; + endAuctionAt: BN | null; + auctionGap: BN | null; + priceFloor: PriceFloor; + state: AuctionState; + bidState: BidState; + totalUncancelledBids: BN; + }) { + this.authority = args.authority; + this.tokenMint = args.tokenMint; + this.lastBid = args.lastBid; + this.endedAt = args.endedAt; + this.endAuctionAt = args.endAuctionAt; + this.auctionGap = args.auctionGap; + this.priceFloor = args.priceFloor; + this.state = args.state; + this.bidState = args.bidState; + this.totalUncancelledBids = args.totalUncancelledBids; + } +} + +export const BIDDER_METADATA_LEN = 32 + 32 + 8 + 8 + 1; +export class BidderMetadata { + // Relationship with the bidder who's metadata this covers. + bidderPubkey: PublicKey; + // Relationship with the auction this bid was placed on. + auctionPubkey: PublicKey; + // Amount that the user bid. + lastBid: BN; + // Tracks the last time this user bid. + lastBidTimestamp: BN; + // Whether the last bid the user made was cancelled. This should also be enough to know if the + // user is a winner, as if cancelled it implies previous bids were also cancelled. + cancelled: boolean; + constructor(args: { + bidderPubkey: PublicKey; + auctionPubkey: PublicKey; + lastBid: BN; + lastBidTimestamp: BN; + cancelled: boolean; + }) { + this.bidderPubkey = args.bidderPubkey; + this.auctionPubkey = args.auctionPubkey; + this.lastBid = args.lastBid; + this.lastBidTimestamp = args.lastBidTimestamp; + this.cancelled = args.cancelled; + } +} + +export const BIDDER_POT_LEN = 32 + 32 + 32 + 1; +export class BidderPot { + /// Points at actual pot that is a token account + bidderPot: PublicKey; + bidderAct: PublicKey; + auctionAct: PublicKey; + emptied: boolean; + constructor(args: { + bidderPot: PublicKey; + bidderAct: PublicKey; + auctionAct: PublicKey; + emptied: boolean; + }) { + this.bidderPot = args.bidderPot; + this.bidderAct = args.bidderAct; + this.auctionAct = args.auctionAct; + this.emptied = args.emptied; + } +} + +export enum WinnerLimitType { + Unlimited = 0, + Capped = 1, +} + +export class WinnerLimit { + type: WinnerLimitType; + usize: BN; + constructor(args: { type: WinnerLimitType; usize: BN }) { + this.type = args.type; + this.usize = args.usize; + } +} + +class CreateAuctionArgs { + instruction: number = 1; + /// How many winners are allowed for this auction. See AuctionData. + winners: WinnerLimit; + /// End time is the cut-off point that the auction is forced to end by. See AuctionData. + endAuctionAt: BN | null; + /// Gap time is how much time after the previous bid where the auction ends. See AuctionData. + auctionGap: BN | null; + /// Token mint for the SPL token used for bidding. + tokenMint: PublicKey; + /// Authority + authority: PublicKey; + /// The resource being auctioned. See AuctionData. + resource: PublicKey; + + priceFloor: PriceFloor; + + constructor(args: { + winners: WinnerLimit; + endAuctionAt: BN | null; + auctionGap: BN | null; + tokenMint: PublicKey; + authority: PublicKey; + resource: PublicKey; + priceFloor: PriceFloor; + }) { + this.winners = args.winners; + this.endAuctionAt = args.endAuctionAt; + this.auctionGap = args.auctionGap; + this.tokenMint = args.tokenMint; + this.authority = args.authority; + this.resource = args.resource; + this.priceFloor = args.priceFloor; + } +} + +class StartAuctionArgs { + instruction: number = 4; + resource: PublicKey; + + constructor(args: { resource: PublicKey }) { + this.resource = args.resource; + } +} + +class PlaceBidArgs { + instruction: number = 6; + resource: PublicKey; + amount: BN; + + constructor(args: { resource: PublicKey; amount: BN }) { + this.resource = args.resource; + this.amount = args.amount; + } +} + +class CancelBidArgs { + instruction: number = 0; + resource: PublicKey; + + constructor(args: { resource: PublicKey }) { + this.resource = args.resource; + } +} + +export const AUCTION_SCHEMA = new Map([ + [ + CreateAuctionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['winners', WinnerLimit], + ['endAuctionAt', { kind: 'option', type: 'u64' }], + ['auctionGap', { kind: 'option', type: 'u64' }], + ['tokenMint', 'pubkey'], + ['authority', 'pubkey'], + ['resource', 'pubkey'], + ['priceFloor', PriceFloor], + ], + }, + ], + [ + WinnerLimit, + { + kind: 'struct', + fields: [ + ['type', 'u8'], + ['usize', 'u64'], + ], + }, + ], + [ + StartAuctionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['resource', 'pubkey'], + ], + }, + ], + [ + PlaceBidArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['amount', 'u64'], + ['resource', 'pubkey'], + ], + }, + ], + [ + CancelBidArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['resource', 'pubkey'], + ], + }, + ], + [ + AuctionData, + { + kind: 'struct', + fields: [ + ['authority', 'pubkey'], + ['tokenMint', 'pubkey'], + ['lastBid', { kind: 'option', type: 'u64' }], + ['endedAt', { kind: 'option', type: 'u64' }], + ['endAuctionAt', { kind: 'option', type: 'u64' }], + ['auctionGap', { kind: 'option', type: 'u64' }], + ['priceFloor', PriceFloor], + ['state', 'u8'], + ['bidState', BidState], + ], + }, + ], + [ + AuctionDataExtended, + { + kind: 'struct', + fields: [ + ['totalUncancelledBids', 'u64'], + ['tickSize', { kind: 'option', type: 'u64' }], + ['gapTickSizePercentage', { kind: 'option', type: 'u8' }], + ], + }, + ], + [ + PriceFloor, + { + kind: 'struct', + fields: [ + ['type', 'u8'], + ['hash', 'pubkey'], + ], + }, + ], + [ + BidState, + { + kind: 'struct', + fields: [ + ['type', 'u8'], + ['bids', [Bid]], + ['max', 'u64'], + ], + }, + ], + [ + Bid, + { + kind: 'struct', + fields: [ + ['key', 'pubkey'], + ['amount', 'u64'], + ], + }, + ], + [ + BidderMetadata, + { + kind: 'struct', + fields: [ + ['bidderPubkey', 'pubkey'], + ['auctionPubkey', 'pubkey'], + ['lastBid', 'u64'], + ['lastBidTimestamp', 'u64'], + ['cancelled', 'u8'], + ], + }, + ], + [ + BidderPot, + { + kind: 'struct', + fields: [ + ['bidderPot', 'pubkey'], + ['bidderAct', 'pubkey'], + ['auctionAct', 'pubkey'], + ['emptied', 'u8'], + ], + }, + ], +]); + +export const decodeAuctionData = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + AuctionData, + buffer, + ) as AuctionData; +}; + +export async function createAuction( + winners: WinnerLimit, + resource: PublicKey, + endAuctionAt: BN | null, + auctionGap: BN | null, + tokenMint: PublicKey, + authority: PublicKey, + creator: PublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new CreateAuctionArgs({ + winners, + resource, + endAuctionAt, + auctionGap, + tokenMint, + authority, + priceFloor: new PriceFloor({ + type: PriceFloorType.None, + hash: SystemProgram.programId, + }), + }), + ), + ); + + const auctionKey: PublicKey = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + resource.toBuffer(), + ], + auctionProgramId, + ) + )[0]; + + const keys = [ + { + pubkey: creator, + isSigner: true, + isWritable: true, + }, + { + pubkey: auctionKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: await getAuctionExtended({ auctionProgramId, resource }), + isSigner: false, + isWritable: true, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: auctionProgramId, + data: data, + }), + ); +} + +export async function startAuction( + resource: PublicKey, + creator: PublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new StartAuctionArgs({ + resource, + }), + ), + ); + + const auctionKey: PublicKey = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + resource.toBuffer(), + ], + auctionProgramId, + ) + )[0]; + + const keys = [ + { + pubkey: creator, + isSigner: false, + isWritable: true, + }, + { + pubkey: auctionKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: auctionProgramId, + data: data, + }), + ); +} + +export async function placeBid( + bidderPubkey: PublicKey, + bidderTokenPubkey: PublicKey, + bidderPotTokenPubkey: PublicKey, + tokenMintPubkey: PublicKey, + transferAuthority: PublicKey, + payer: PublicKey, + resource: PublicKey, + amount: BN, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new PlaceBidArgs({ + resource, + amount, + }), + ), + ); + + const auctionKey: PublicKey = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + resource.toBuffer(), + ], + auctionProgramId, + ) + )[0]; + + const bidderPotKey = await getBidderPotKey({ + auctionProgramId, + auctionKey, + bidderPubkey, + }); + + const bidderMetaKey: PublicKey = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + auctionKey.toBuffer(), + bidderPubkey.toBuffer(), + Buffer.from('metadata'), + ], + auctionProgramId, + ) + )[0]; + + const keys = [ + { + pubkey: bidderPubkey, + isSigner: true, + isWritable: false, + }, + { + pubkey: bidderTokenPubkey, + isSigner: false, + isWritable: true, + }, + { + pubkey: bidderPotKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: bidderPotTokenPubkey, + isSigner: false, + isWritable: true, + }, + { + pubkey: bidderMetaKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: auctionKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: await getAuctionExtended({ auctionProgramId, resource }), + isSigner: false, + isWritable: true, + }, + { + pubkey: tokenMintPubkey, + isSigner: false, + isWritable: true, + }, + { + pubkey: transferAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: auctionProgramId, + data: data, + }), + ); + + return { + amount, + }; +} + +export async function getBidderPotKey({ + auctionProgramId, + auctionKey, + bidderPubkey, +}: { + auctionProgramId: PublicKey; + auctionKey: PublicKey; + bidderPubkey: PublicKey; +}): Promise { + return ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + auctionKey.toBuffer(), + bidderPubkey.toBuffer(), + ], + auctionProgramId, + ) + )[0]; +} + +export async function getAuctionExtended({ + auctionProgramId, + resource, +}: { + auctionProgramId: PublicKey; + resource: PublicKey; +}): Promise { + return ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + resource.toBuffer(), + Buffer.from(EXTENDED), + ], + auctionProgramId, + ) + )[0]; +} + +export async function cancelBid( + bidderPubkey: PublicKey, + bidderTokenPubkey: PublicKey, + bidderPotTokenPubkey: PublicKey, + tokenMintPubkey: PublicKey, + resource: PublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new CancelBidArgs({ + resource, + }), + ), + ); + + const auctionKey: PublicKey = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + resource.toBuffer(), + ], + auctionProgramId, + ) + )[0]; + + const bidderPotKey = await getBidderPotKey({ + auctionProgramId, + auctionKey, + bidderPubkey, + }); + + const bidderMetaKey: PublicKey = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + auctionProgramId.toBuffer(), + auctionKey.toBuffer(), + bidderPubkey.toBuffer(), + Buffer.from('metadata'), + ], + auctionProgramId, + ) + )[0]; + + const keys = [ + { + pubkey: bidderPubkey, + isSigner: true, + isWritable: false, + }, + { + pubkey: bidderTokenPubkey, + isSigner: false, + isWritable: true, + }, + { + pubkey: bidderPotKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: bidderPotTokenPubkey, + isSigner: false, + isWritable: true, + }, + { + pubkey: bidderMetaKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: auctionKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: await getAuctionExtended({ auctionProgramId, resource }), + isSigner: false, + isWritable: true, + }, + { + pubkey: tokenMintPubkey, + isSigner: false, + isWritable: true, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: auctionProgramId, + data: data, + }), + ); +} diff --git a/js/packages/common/src/actions/index.ts b/js/packages/common/src/actions/index.ts new file mode 100644 index 0000000..f11ceca --- /dev/null +++ b/js/packages/common/src/actions/index.ts @@ -0,0 +1,4 @@ +export * from './account'; +export * from './metadata'; +export * from './vault'; +export * from './auction'; diff --git a/js/packages/common/src/actions/metadata.ts b/js/packages/common/src/actions/metadata.ts new file mode 100644 index 0000000..24a4667 --- /dev/null +++ b/js/packages/common/src/actions/metadata.ts @@ -0,0 +1,1022 @@ +import { + PublicKey, + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { programIds, PROGRAM_IDS } from '../utils/ids'; +import { deserializeUnchecked, serialize } from 'borsh'; +import BN from 'bn.js'; +export const METADATA_PREFIX = 'metadata'; +export const EDITION = 'edition'; +export const RESERVATION = 'reservation'; + +export const MAX_NAME_LENGTH = 32; + +export const MAX_SYMBOL_LENGTH = 10; + +export const MAX_URI_LENGTH = 200; + +export const MAX_CREATOR_LIMIT = 5; + +export const MAX_CREATOR_LEN = 32 + 1 + 1; + +export const MAX_METADATA_LEN = + 1 + + 32 + + 32 + + MAX_NAME_LENGTH + + MAX_SYMBOL_LENGTH + + MAX_URI_LENGTH + + MAX_CREATOR_LIMIT * MAX_CREATOR_LEN + + 1 + + 1 + + 200; + +export const MAX_MASTER_EDITION_KEN = 1 + 9 + 8 + 32 + 32; + +export enum MetadataKey { + MetadataV1 = 0, + EditionV1 = 1, + MasterEditionV1 = 2, + ReservationListV1 = 3, +} + +export enum MetadataCategory { + Audio = 'audio', + Video = 'video', + Image = 'image', + VR = 'vr', +} + +type FileOrString = File | string; + +export interface IMetadataExtension { + name: string; + symbol: string; + + creators: Creator[] | null; + description: string; + // preview image absolute URI + image: string; + // stores link to item on meta + external_url: string; + + seller_fee_basis_points: number; + + properties: { + files?: FileOrString[]; + category: MetadataCategory; + maxSupply?: number; + creators?: { + address: string; + verified: boolean; + shares: number; + }[]; + }; +} + +export class MasterEdition { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + /// Can be used to mint tokens that give one-time permission to mint a single limited edition. + printingMint: PublicKey; + /// If you don't know how many printing tokens you are going to need, but you do know + /// you are going to need some amount in the future, you can use a token from this mint. + /// Coming back to token metadata with one of these tokens allows you to mint (one time) + /// any number of printing tokens you want. This is used for instance by Auction Manager + /// with participation NFTs, where we dont know how many people will bid and need participation + /// printing tokens to redeem, so we give it ONE of these tokens to use after the auction is over, + /// because when the auction begins we just dont know how many printing tokens we will need, + /// but at the end we will. At the end it then burns this token with token-metadata to + /// get the printing tokens it needs to give to bidders. Each bidder then redeems a printing token + /// to get their limited editions. + oneTimePrintingAuthorizationMint: PublicKey; + + constructor(args: { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + printingMint: PublicKey; + oneTimePrintingAuthorizationMint: PublicKey; + }) { + this.key = MetadataKey.MasterEditionV1; + this.supply = args.supply; + this.maxSupply = args.maxSupply; + this.printingMint = args.printingMint; + this.oneTimePrintingAuthorizationMint = + args.oneTimePrintingAuthorizationMint; + } +} + +export class Edition { + key: MetadataKey; + /// Points at MasterEdition struct + parent: PublicKey; + /// Starting at 0 for master record, this is incremented for each edition minted. + edition: BN; + + constructor(args: { key: MetadataKey; parent: PublicKey; edition: BN }) { + this.key = MetadataKey.EditionV1; + this.parent = args.parent; + this.edition = args.edition; + } +} +export class Reservation { + address: PublicKey; + spotsRemaining: number; + totalSpots: number; + constructor(args: { + address: PublicKey; + spotsRemaining: number; + totalSpots: number; + }) { + this.address = args.address; + this.spotsRemaining = args.spotsRemaining; + this.totalSpots = args.totalSpots; + } +} + +export class ReservationList { + key: MetadataKey = MetadataKey.ReservationListV1; + /// Present for reverse lookups + masterEdition: PublicKey; + + /// What supply counter was on master_edition when this reservation was created. + supplySnapshot: BN | null; + reservations: Reservation[]; + + constructor(args: { + key: MetadataKey; + masterEdition: PublicKey; + supplySnapshot: BN | null; + reservations: Reservation[]; + }) { + this.key = MetadataKey.EditionV1; + this.masterEdition = args.masterEdition; + this.supplySnapshot = args.supplySnapshot; + this.reservations = args.reservations; + } +} + +export class Creator { + address: PublicKey; + verified: boolean; + share: number; + + constructor(args: { address: PublicKey; verified: boolean; share: number }) { + this.address = args.address; + this.verified = args.verified; + this.share = args.share; + } +} + +export class Data { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + constructor(args: { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + }) { + this.name = args.name; + this.symbol = args.symbol; + this.uri = args.uri; + this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; + this.creators = args.creators; + } +} + +export class Metadata { + key: MetadataKey; + updateAuthority: PublicKey; + mint: PublicKey; + data: Data; + primarySaleHappened: boolean; + isMutable: boolean; + + extended?: IMetadataExtension; + masterEdition?: PublicKey; + edition?: PublicKey; + constructor(args: { + updateAuthority: PublicKey; + mint: PublicKey; + data: Data; + primarySaleHappened: boolean; + isMutable: boolean; + }) { + this.key = MetadataKey.MetadataV1; + this.updateAuthority = args.updateAuthority; + this.mint = args.mint; + this.data = args.data; + this.primarySaleHappened = args.primarySaleHappened; + this.isMutable = args.isMutable; + } +} + +class CreateMetadataArgs { + instruction: number = 0; + data: Data; + isMutable: boolean; + + constructor(args: { data: Data; isMutable: boolean }) { + this.data = args.data; + this.isMutable = args.isMutable; + } +} +class UpdateMetadataArgs { + instruction: number = 1; + data: Data | null; + // Not used by this app, just required for instruction + updateAuthority: PublicKey | null; + primarySaleHappened: boolean | null; + constructor(args: { + data?: Data; + updateAuthority?: string; + primarySaleHappened: boolean | null; + }) { + this.data = args.data ? args.data : null; + this.updateAuthority = args.updateAuthority + ? new PublicKey(args.updateAuthority) + : null; + this.primarySaleHappened = args.primarySaleHappened; + } +} + +class CreateMasterEditionArgs { + instruction: number = 2; + maxSupply: BN | null; + constructor(args: { maxSupply: BN | null }) { + this.maxSupply = args.maxSupply; + } +} + +class MintPrintingTokensArgs { + instruction: number = 9; + supply: BN; + + constructor(args: { supply: BN }) { + this.supply = args.supply; + } +} + +export const METADATA_SCHEMA = new Map([ + [ + CreateMetadataArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['data', Data], + ['isMutable', 'u8'], // bool + ], + }, + ], + [ + UpdateMetadataArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['data', { kind: 'option', type: Data }], + ['updateAuthority', { kind: 'option', type: 'pubkey' }], + ['primarySaleHappened', { kind: 'option', type: 'u8' }], + ], + }, + ], + + [ + CreateMasterEditionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + MintPrintingTokensArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['supply', 'u64'], + ], + }, + ], + [ + MasterEdition, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['supply', 'u64'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ['printingMint', 'pubkey'], + ['oneTimePrintingAuthorizationMint', 'pubkey'], + ], + }, + ], + [ + Edition, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['parent', 'pubkey'], + ['edition', 'u64'], + ], + }, + ], + [ + Data, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['symbol', 'string'], + ['uri', 'string'], + ['sellerFeeBasisPoints', 'u16'], + ['creators', { kind: 'option', type: [Creator] }], + ], + }, + ], + [ + Creator, + { + kind: 'struct', + fields: [ + ['address', 'pubkey'], + ['verified', 'u8'], + ['share', 'u8'], + ], + }, + ], + [ + Metadata, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['updateAuthority', 'pubkey'], + ['mint', 'pubkey'], + ['data', Data], + ['primarySaleHappened', 'u8'], // bool + ['isMutable', 'u8'], // bool + ], + }, + ], + [ + Reservation, + { + kind: 'struct', + fields: [ + ['address', 'pubkey'], + ['spotsRemaining', 'u8'], + ['totalSpots', 'u8'], + ], + }, + ], + [ + ReservationList, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['masterEdition', 'pubkey'], + ['supplySnapshot', { kind: 'option', type: 'u64' }], + ['reservations', [Reservation]], + ], + }, + ], +]); + +export const decodeMetadata = async (buffer: Buffer): Promise => { + const metadata = deserializeUnchecked( + METADATA_SCHEMA, + Metadata, + buffer, + ) as Metadata; + metadata.edition = await getEdition(metadata.mint); + metadata.masterEdition = await getEdition(metadata.mint); + return metadata; +}; + +export const decodeEdition = (buffer: Buffer) => { + return deserializeUnchecked(METADATA_SCHEMA, Edition, buffer) as Edition; +}; + +export const decodeMasterEdition = (buffer: Buffer) => { + return deserializeUnchecked( + METADATA_SCHEMA, + MasterEdition, + buffer, + ) as MasterEdition; +}; + +export async function updateMetadata( + data: Data | undefined, + newUpdateAuthority: string | undefined, + primarySaleHappened: boolean | null | undefined, + mintKey: PublicKey, + updateAuthority: PublicKey, + instructions: TransactionInstruction[], + metadataAccount?: PublicKey, +) { + const metadataProgramId = programIds().metadata; + + metadataAccount = + metadataAccount || + ( + await PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + metadataProgramId.toBuffer(), + mintKey.toBuffer(), + ], + metadataProgramId, + ) + )[0]; + + const value = new UpdateMetadataArgs({ + data, + updateAuthority: !newUpdateAuthority ? undefined : newUpdateAuthority, + primarySaleHappened: + primarySaleHappened === null || primarySaleHappened === undefined + ? null + : primarySaleHappened, + }); + const txnData = Buffer.from(serialize(METADATA_SCHEMA, value)); + const keys = [ + { + pubkey: metadataAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: updateAuthority, + isSigner: true, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data: txnData, + }), + ); + + return metadataAccount; +} + +export async function createMetadata( + data: Data, + updateAuthority: PublicKey, + mintKey: PublicKey, + mintAuthorityKey: PublicKey, + instructions: TransactionInstruction[], + payer: PublicKey, +) { + const metadataProgramId = programIds().metadata; + + const metadataAccount = ( + await PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + metadataProgramId.toBuffer(), + mintKey.toBuffer(), + ], + metadataProgramId, + ) + )[0]; + console.log('Data', data); + const value = new CreateMetadataArgs({ data, isMutable: true }); + const txnData = Buffer.from(serialize(METADATA_SCHEMA, value)); + + const keys = [ + { + pubkey: metadataAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: mintKey, + isSigner: false, + isWritable: false, + }, + { + pubkey: mintAuthorityKey, + isSigner: true, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: updateAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data: txnData, + }), + ); + + return metadataAccount; +} + +export async function createMasterEdition( + maxSupply: BN | undefined, + mintKey: PublicKey, + printingMintKey: PublicKey, + oneTimePrintingAuthorizationMint: PublicKey, + updateAuthorityKey: PublicKey, + mintAuthorityKey: PublicKey, + instructions: TransactionInstruction[], + payer: PublicKey, + printingMintAuthority: PublicKey, + oneTimePrintingAuthorizationMintAuthority?: PublicKey, +) { + const metadataProgramId = programIds().metadata; + + const metadataAccount = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + metadataProgramId.toBuffer(), + mintKey.toBuffer(), + ], + metadataProgramId, + ) + )[0]; + + const editionAccount = ( + await PublicKey.findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + metadataProgramId.toBuffer(), + mintKey.toBuffer(), + Buffer.from(EDITION), + ], + metadataProgramId, + ) + )[0]; + + const value = new CreateMasterEditionArgs({ maxSupply: maxSupply || null }); + const data = Buffer.from(serialize(METADATA_SCHEMA, value)); + + const keys = [ + { + pubkey: editionAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: mintKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: printingMintKey, + isSigner: false, + isWritable: false, + }, + { + pubkey: oneTimePrintingAuthorizationMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: updateAuthorityKey, + isSigner: true, + isWritable: false, + }, + { + pubkey: printingMintAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: mintAuthorityKey, + isSigner: true, + isWritable: false, + }, + { + pubkey: metadataAccount, + isSigner: false, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + if (oneTimePrintingAuthorizationMintAuthority) + keys.push({ + pubkey: oneTimePrintingAuthorizationMintAuthority, + isSigner: true, + isWritable: false, + }); + + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data, + }), + ); +} + +export async function mintNewEditionFromMasterEditionViaToken( + newMint: PublicKey, + tokenMint: PublicKey, + newMintAuthority: PublicKey, + printingMint: PublicKey, + authorizationTokenHoldingAccount: PublicKey, + burnAuthority: PublicKey, + updateAuthorityOfMaster: PublicKey, + reservationList: PublicKey | undefined, + instructions: TransactionInstruction[], + payer: PublicKey, +) { + const metadataProgramId = programIds().metadata; + + const newMetadataKey = await getMetadata(newMint); + const masterMetadataKey = await getMetadata(tokenMint); + const newEdition = await getEdition(newMint); + const masterEdition = await getEdition(tokenMint); + + const data = Buffer.from([3]); + + const keys = [ + { + pubkey: newMetadataKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: newEdition, + isSigner: false, + isWritable: true, + }, + { + pubkey: masterEdition, + isSigner: false, + isWritable: true, + }, + { + pubkey: newMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: newMintAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: printingMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: authorizationTokenHoldingAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: burnAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: updateAuthorityOfMaster, + isSigner: false, + isWritable: false, + }, + { + pubkey: masterMetadataKey, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + if (reservationList) { + keys.push({ + pubkey: reservationList, + isSigner: false, + isWritable: true, + }); + } + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data, + }), + ); +} + +export async function updatePrimarySaleHappenedViaToken( + metadata: PublicKey, + owner: PublicKey, + tokenAccount: PublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const data = Buffer.from([4]); + + const keys = [ + { + pubkey: metadata, + isSigner: false, + isWritable: true, + }, + { + pubkey: owner, + isSigner: true, + isWritable: false, + }, + { + pubkey: tokenAccount, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data, + }), + ); +} + +export async function createReservationList( + metadata: PublicKey, + masterEdition: PublicKey, + resource: PublicKey, + updateAuthority: PublicKey, + payer: PublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const reservationList = await getReservationList(masterEdition, resource); + const data = Buffer.from([6]); + + const keys = [ + { + pubkey: reservationList, + isSigner: false, + isWritable: true, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: updateAuthority, + isSigner: true, + isWritable: false, + }, + + { + pubkey: masterEdition, + isSigner: false, + isWritable: false, + }, + { + pubkey: resource, + isSigner: false, + isWritable: false, + }, + { + pubkey: metadata, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data, + }), + ); +} + +export async function signMetadata( + metadata: PublicKey, + creator: PublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const data = Buffer.from([7]); + + const keys = [ + { + pubkey: metadata, + isSigner: false, + isWritable: true, + }, + { + pubkey: creator, + isSigner: true, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data, + }), + ); +} + +export async function mintPrintingTokens( + destination: PublicKey, + printingMint: PublicKey, + updateAuthority: PublicKey, + metadata: PublicKey, + masterEdition: PublicKey, + supply: BN, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const metadataProgramId = PROGRAM_IDS.metadata; + + const value = new MintPrintingTokensArgs({ supply }); + const data = Buffer.from(serialize(METADATA_SCHEMA, value)); + + const keys = [ + { + pubkey: destination, + isSigner: false, + isWritable: true, + }, + { + pubkey: printingMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: updateAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: metadata, + isSigner: false, + isWritable: false, + }, + { + pubkey: masterEdition, + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: metadataProgramId, + data, + }), + ); +} + +export async function getEdition(tokenMint: PublicKey): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await PublicKey.findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + PROGRAM_IDS.metadata.toBuffer(), + tokenMint.toBuffer(), + Buffer.from(EDITION), + ], + PROGRAM_IDS.metadata, + ) + )[0]; +} + +export async function getMetadata(tokenMint: PublicKey): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await PublicKey.findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + PROGRAM_IDS.metadata.toBuffer(), + tokenMint.toBuffer(), + ], + PROGRAM_IDS.metadata, + ) + )[0]; +} + +export async function getReservationList( + masterEdition: PublicKey, + resource: PublicKey, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await PublicKey.findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + PROGRAM_IDS.metadata.toBuffer(), + masterEdition.toBuffer(), + Buffer.from(RESERVATION), + resource.toBuffer(), + ], + PROGRAM_IDS.metadata, + ) + )[0]; +} diff --git a/js/packages/common/src/actions/vault.ts b/js/packages/common/src/actions/vault.ts new file mode 100644 index 0000000..24e296b --- /dev/null +++ b/js/packages/common/src/actions/vault.ts @@ -0,0 +1,707 @@ +import { + PublicKey, + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { programIds } from '../utils/ids'; +import { deserializeUnchecked, serialize } from 'borsh'; +import BN from 'bn.js'; + +export const VAULT_PREFIX = 'vault'; +export enum VaultKey { + VaultV1 = 0, + SafetyDepositBoxV1 = 1, + ExternalPriceAccountV1 = 2, +} + +export enum VaultState { + Inactive = 0, + Active = 1, + Combined = 2, + Deactivated = 3, +} + +export const MAX_VAULT_SIZE = + 1 + 32 + 32 + 32 + 32 + 1 + 32 + 1 + 32 + 1 + 1 + 8; + +export const MAX_EXTERNAL_ACCOUNT_SIZE = 1 + 8 + 32 + 1; +export class Vault { + key: VaultKey; + /// Store token program used + tokenProgram: PublicKey; + /// Mint that produces the fractional shares + fractionMint: PublicKey; + /// Authority who can make changes to the vault + authority: PublicKey; + /// treasury where fractional shares are held for redemption by authority + fractionTreasury: PublicKey; + /// treasury where monies are held for fractional share holders to redeem(burn) shares once buyout is made + redeemTreasury: PublicKey; + /// Can authority mint more shares from fraction_mint after activation + allowFurtherShareCreation: boolean; + + /// Must point at an ExternalPriceAccount, which gives permission and price for buyout. + pricingLookupAddress: PublicKey; + /// In inactive state, we use this to set the order key on Safety Deposit Boxes being added and + /// then we increment it and save so the next safety deposit box gets the next number. + /// In the Combined state during token redemption by authority, we use it as a decrementing counter each time + /// The authority of the vault withdrawals a Safety Deposit contents to count down how many + /// are left to be opened and closed down. Once this hits zero, and the fraction mint has zero shares, + /// then we can deactivate the vault. + tokenTypeCount: number; + state: VaultState; + + /// Once combination happens, we copy price per share to vault so that if something nefarious happens + /// to external price account, like price change, we still have the math 'saved' for use in our calcs + lockedPricePerShare: BN; + + constructor(args: { + tokenProgram: PublicKey; + fractionMint: PublicKey; + authority: PublicKey; + fractionTreasury: PublicKey; + redeemTreasury: PublicKey; + allowFurtherShareCreation: boolean; + pricingLookupAddress: PublicKey; + tokenTypeCount: number; + state: VaultState; + lockedPricePerShare: BN; + }) { + this.key = VaultKey.VaultV1; + this.tokenProgram = args.tokenProgram; + this.fractionMint = args.fractionMint; + this.authority = args.authority; + this.fractionTreasury = args.fractionTreasury; + this.redeemTreasury = args.redeemTreasury; + this.allowFurtherShareCreation = args.allowFurtherShareCreation; + this.pricingLookupAddress = args.pricingLookupAddress; + this.tokenTypeCount = args.tokenTypeCount; + this.state = args.state; + this.lockedPricePerShare = args.lockedPricePerShare; + } +} +export class SafetyDepositBox { + /// Each token type in a vault has it's own box that contains it's mint and a look-back + key: VaultKey; + /// VaultKey pointing to the parent vault + vault: PublicKey; + /// This particular token's mint + tokenMint: PublicKey; + /// Account that stores the tokens under management + store: PublicKey; + /// the order in the array of registries + order: number; + + constructor(args: { + vault: PublicKey; + tokenMint: PublicKey; + store: PublicKey; + order: number; + }) { + this.key = VaultKey.SafetyDepositBoxV1; + this.vault = args.vault; + this.tokenMint = args.tokenMint; + this.store = args.store; + this.order = args.order; + } +} + +export class ExternalPriceAccount { + key: VaultKey; + pricePerShare: BN; + /// Mint of the currency we are pricing the shares against, should be same as redeem_treasury. + /// Most likely will be USDC mint most of the time. + priceMint: PublicKey; + /// Whether or not combination has been allowed for this vault. + allowedToCombine: boolean; + + constructor(args: { + pricePerShare: BN; + priceMint: PublicKey; + allowedToCombine: boolean; + }) { + this.key = VaultKey.ExternalPriceAccountV1; + this.pricePerShare = args.pricePerShare; + this.priceMint = args.priceMint; + this.allowedToCombine = args.allowedToCombine; + } +} + +class InitVaultArgs { + instruction: number = 0; + allowFurtherShareCreation: boolean = false; + + constructor(args: { allowFurtherShareCreation: boolean }) { + this.allowFurtherShareCreation = args.allowFurtherShareCreation; + } +} + +class AmountArgs { + instruction: number; + amount: BN; + + constructor(args: { instruction: number; amount: BN }) { + this.instruction = args.instruction; + this.amount = args.amount; + } +} + +class NumberOfShareArgs { + instruction: number; + numberOfShares: BN; + + constructor(args: { instruction: number; numberOfShares: BN }) { + this.instruction = args.instruction; + this.numberOfShares = args.numberOfShares; + } +} + +class UpdateExternalPriceAccountArgs { + instruction: number = 9; + externalPriceAccount: ExternalPriceAccount; + + constructor(args: { externalPriceAccount: ExternalPriceAccount }) { + this.externalPriceAccount = args.externalPriceAccount; + } +} + +export const VAULT_SCHEMA = new Map([ + [ + InitVaultArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['allowFurtherShareCreation', 'u8'], + ], + }, + ], + [ + AmountArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['amount', 'u64'], + ], + }, + ], + [ + NumberOfShareArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['numberOfShares', 'u64'], + ], + }, + ], + [ + UpdateExternalPriceAccountArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['externalPriceAccount', ExternalPriceAccount], + ], + }, + ], + [ + Vault, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['tokenProgram', 'pubkey'], + ['fractionMint', 'pubkey'], + ['authority', 'pubkey'], + ['fractionTreasury', 'pubkey'], + ['redeemTreasury', 'pubkey'], + ['allowFurtherShareCreation', 'u8'], + ['pricingLookupAddress', 'u8'], + ['tokenTypeCount', 'u8'], + ['state', 'u8'], + ['lockedPricePerShare', 'u64'], + ], + }, + ], + [ + SafetyDepositBox, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['vault', 'pubkey'], + ['tokenMint', 'pubkey'], + ['store', 'pubkey'], + ['order', 'u8'], + ], + }, + ], + [ + ExternalPriceAccount, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['pricePerShare', 'u64'], + ['priceMint', 'pubkey'], + ['allowedToCombine', 'u8'], + ], + }, + ], +]); + +export const decodeVault = (buffer: Buffer) => { + return deserializeUnchecked(VAULT_SCHEMA, Vault, buffer) as Vault; +}; + +export const decodeSafetyDeposit = (buffer: Buffer) => { + return deserializeUnchecked( + VAULT_SCHEMA, + SafetyDepositBox, + buffer, + ) as SafetyDepositBox; +}; + +export async function initVault( + allowFurtherShareCreation: boolean, + fractionalMint: PublicKey, + redeemTreasury: PublicKey, + fractionalTreasury: PublicKey, + vault: PublicKey, + vaultAuthority: PublicKey, + pricingLookupAddress: PublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const data = Buffer.from( + serialize(VAULT_SCHEMA, new InitVaultArgs({ allowFurtherShareCreation })), + ); + + const keys = [ + { + pubkey: fractionalMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: redeemTreasury, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionalTreasury, + isSigner: false, + isWritable: true, + }, + { + pubkey: vault, + isSigner: false, + isWritable: true, + }, + { + pubkey: vaultAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: pricingLookupAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: vaultProgramId, + data: data, + }), + ); +} + +export async function getSafetyDepositBox( + vault: PublicKey, + tokenMint: PublicKey, +): Promise { + const vaultProgramId = programIds().vault; + + return ( + await PublicKey.findProgramAddress( + [Buffer.from(VAULT_PREFIX), vault.toBuffer(), tokenMint.toBuffer()], + vaultProgramId, + ) + )[0]; +} + +export async function addTokenToInactiveVault( + amount: BN, + tokenMint: PublicKey, + tokenAccount: PublicKey, + tokenStoreAccount: PublicKey, + vault: PublicKey, + vaultAuthority: PublicKey, + payer: PublicKey, + transferAuthority: PublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const safetyDepositBox: PublicKey = await getSafetyDepositBox( + vault, + tokenMint, + ); + + const value = new AmountArgs({ + instruction: 1, + amount, + }); + + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + const keys = [ + { + pubkey: safetyDepositBox, + isSigner: false, + isWritable: true, + }, + { + pubkey: tokenAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: tokenStoreAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: vault, + isSigner: false, + isWritable: true, + }, + { + pubkey: vaultAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: transferAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: vaultProgramId, + data, + }), + ); +} + +export async function activateVault( + numberOfShares: BN, + vault: PublicKey, + fractionMint: PublicKey, + fractionTreasury: PublicKey, + vaultAuthority: PublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const fractionMintAuthority = ( + await PublicKey.findProgramAddress( + [Buffer.from(VAULT_PREFIX), vaultProgramId.toBuffer()], + vaultProgramId, + ) + )[0]; + + const value = new NumberOfShareArgs({ instruction: 2, numberOfShares }); + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + + const keys = [ + { + pubkey: vault, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionTreasury, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionMintAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: vaultAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: vaultProgramId, + data, + }), + ); +} + +export async function combineVault( + vault: PublicKey, + outstandingShareTokenAccount: PublicKey, + payingTokenAccount: PublicKey, + fractionMint: PublicKey, + fractionTreasury: PublicKey, + redeemTreasury: PublicKey, + newVaultAuthority: PublicKey | undefined, + vaultAuthority: PublicKey, + transferAuthority: PublicKey, + externalPriceAccount: PublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const burnAuthority = ( + await PublicKey.findProgramAddress( + [Buffer.from(VAULT_PREFIX), vaultProgramId.toBuffer()], + vaultProgramId, + ) + )[0]; + + const data = Buffer.from([3]); + + const keys = [ + { + pubkey: vault, + isSigner: false, + isWritable: true, + }, + { + pubkey: outstandingShareTokenAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: payingTokenAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionTreasury, + isSigner: false, + isWritable: true, + }, + { + pubkey: redeemTreasury, + isSigner: false, + isWritable: true, + }, + { + pubkey: newVaultAuthority || vaultAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: vaultAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: transferAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: burnAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: externalPriceAccount, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: vaultProgramId, + data, + }), + ); +} + +export async function withdrawTokenFromSafetyDepositBox( + amount: BN, + destination: PublicKey, + safetyDepositBox: PublicKey, + storeKey: PublicKey, + vault: PublicKey, + fractionMint: PublicKey, + vaultAuthority: PublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const transferAuthority = ( + await PublicKey.findProgramAddress( + [Buffer.from(VAULT_PREFIX), vaultProgramId.toBuffer()], + vaultProgramId, + ) + )[0]; + + const value = new AmountArgs({ instruction: 5, amount }); + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + + const keys = [ + { + pubkey: destination, + isSigner: false, + isWritable: true, + }, + { + pubkey: safetyDepositBox, + isSigner: false, + isWritable: true, + }, + { + pubkey: storeKey, + isSigner: false, + isWritable: true, + }, + { + pubkey: vault, + isSigner: false, + isWritable: true, + }, + { + pubkey: fractionMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: vaultAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: transferAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: vaultProgramId, + data, + }), + ); +} + +export async function updateExternalPriceAccount( + externalPriceAccountKey: PublicKey, + externalPriceAccount: ExternalPriceAccount, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const value = new UpdateExternalPriceAccountArgs({ externalPriceAccount }); + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + console.log('Data', data); + + const keys = [ + { + pubkey: externalPriceAccountKey, + isSigner: false, + isWritable: true, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: vaultProgramId, + data, + }), + ); +} + +export async function getSafetyDepositBoxAddress( + vault: PublicKey, + tokenMint: PublicKey, +): Promise { + const PROGRAM_IDS = programIds(); + return ( + await PublicKey.findProgramAddress( + [Buffer.from(VAULT_PREFIX), vault.toBuffer(), tokenMint.toBuffer()], + PROGRAM_IDS.vault, + ) + )[0]; +} diff --git a/js/packages/common/src/components/ActionConfirmation/index.tsx b/js/packages/common/src/components/ActionConfirmation/index.tsx new file mode 100644 index 0000000..0e8fd50 --- /dev/null +++ b/js/packages/common/src/components/ActionConfirmation/index.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { Button } from 'antd'; +import { LABELS } from '../../constants'; +import { Link } from 'react-router-dom'; +import './style.css'; + +export const ActionConfirmation = (props: { + className?: string; + onClose: () => void; +}) => { + return ( +
+

Congratulations!

+
Your action has been successfully executed
+
+ + + + +
+ ); +}; diff --git a/js/packages/common/src/components/ActionConfirmation/style.less b/js/packages/common/src/components/ActionConfirmation/style.less new file mode 100644 index 0000000..64d27b2 --- /dev/null +++ b/js/packages/common/src/components/ActionConfirmation/style.less @@ -0,0 +1,5 @@ +.success-icon { + background-image: url('data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzMwMHB4JyB3aWR0aD0nMzAwcHgnICBmaWxsPSIjNzBjMDQxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iTGF5ZXIgMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4PSIwcHgiIHk9IjBweCI+PHRpdGxlPmJ1c2luZXNzIGZpbmFuY2UgdXAgcmlzZSBhcnJvdyBkZW1hbmQ8L3RpdGxlPjxwYXRoIGQ9Ik01LDE0YTEsMSwwLDEsMC0xLTFINEExLDEsMCwwLDAsNSwxNFoiPjwvcGF0aD48cGF0aCBkPSJNNyw1Mkg1NWExLDEsMCwwLDAsMC0ySDUwVjI3YTEsMSwwLDAsMC0yLDBWNTBINDRWMzRhMSwxLDAsMCwwLTIsMFY1MEgzOFYzOWExLDEsMCwwLDAtMiwwVjUwSDMyVjQzYTEsMSwwLDAsMC0yLDB2N0gyNlY0NmExLDEsMCwwLDAtMiwwdjRIMjBWNDdhMSwxLDAsMCwwLTIsMHYzSDE0VjQ4YTEsMSwwLDAsMC0yLDB2Mkg3YTEsMSwwLDAsMS0xLTFWMTdhMSwxLDAsMCwwLTIsMFY0OUEzLDMsMCwwLDAsNyw1MloiPjwvcGF0aD48cGF0aCBkPSJNNTksNTBhMSwxLDAsMCwwLTEsMWgwYTEsMSwwLDEsMCwxLTFaIj48L3BhdGg+PHBhdGggZD0iTTExLDQ0aC4wN2E0OS4wNyw0OS4wNywwLDAsMCwyNS41Mi05LjE5QTQ4LjkxLDQ4LjkxLDAsMCwwLDQ5LjcsMjAuNTlMNTIuMzgsMjIsNTIsMTRsLTYuNzEsNC4zMSwyLjYzLDEuMzZBNDYuODEsNDYuODEsMCwwLDEsMzUuNDEsMzMuMTksNDYuOTQsNDYuOTQsMCwwLDEsMTAuOTMsNDIsMSwxLDAsMCwwLDExLDQ0WiI+PC9wYXRoPjwvc3ZnPg=='); + width: 280px; + height: 280px; +} diff --git a/js/packages/common/src/components/AppBar/index.tsx b/js/packages/common/src/components/AppBar/index.tsx new file mode 100644 index 0000000..5239402 --- /dev/null +++ b/js/packages/common/src/components/AppBar/index.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import { Button, Popover } from 'antd'; +import { CurrentUserBadge } from '../CurrentUserBadge'; +import { SettingOutlined } from '@ant-design/icons'; +import { Settings } from '../Settings'; +import { LABELS } from '../../constants/labels'; +import { ConnectButton } from '..'; +import { useWallet } from '../../contexts/wallet'; +import './style.css'; +export const AppBar = (props: { + left?: JSX.Element; + right?: JSX.Element; + useWalletBadge?: boolean; + additionalSettings?: JSX.Element; +}) => { + const { connected } = useWallet(); + + const TopBar = ( +
+ {props.left} + {connected ? + ( + + ) + : ( + + )} + } + trigger="click" + > +
+ ); + + return TopBar; +}; diff --git a/js/packages/common/src/components/AppBar/style.less b/js/packages/common/src/components/AppBar/style.less new file mode 100644 index 0000000..0c8bfca --- /dev/null +++ b/js/packages/common/src/components/AppBar/style.less @@ -0,0 +1,57 @@ +.App-Bar { + -webkit-box-pack: justify; + justify-content: space-between !important; + -webkit-box-align: center; + align-items: center; + flex-direction: row; + display: flex; + width: 100%; + top: 0px; + position: relative; + padding: 1rem; + z-index: 2; + + .ant-menu-horizontal { + border-bottom-color: transparent; + background-color: transparent; + line-height: inherit; + font-size: 16px; + margin: 0 10px; + + .ant-menu-item { + margin: 0 10px; + color: lightgrey; + height: 35px; + line-height: 35px; + border-width: 0px !important; + } + + .ant-menu-item:hover { + color: white; + border-width: 0px !important; + } + + .ant-menu-item-selected { + font-weight: bold; + } + } +} + +.App-Bar-left { + box-sizing: border-box; + margin: 0px; + min-width: 0px; + display: flex; + padding: 0px; + -webkit-box-align: center; + align-items: center; + width: fit-content; +} + +.App-Bar-right { + display: flex; + flex-direction: row; + -webkit-box-align: center; + align-items: center; + justify-self: flex-end; +} diff --git a/js/packages/common/src/components/BackButton/index.tsx b/js/packages/common/src/components/BackButton/index.tsx new file mode 100644 index 0000000..82ce886 --- /dev/null +++ b/js/packages/common/src/components/BackButton/index.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { Button } from 'antd'; +import { LABELS } from '../../constants'; +import { useHistory } from 'react-router-dom'; + +export const BackButton = () => { + const history = useHistory(); + return ( + + ); +}; diff --git a/js/packages/common/src/components/ConnectButton/index.tsx b/js/packages/common/src/components/ConnectButton/index.tsx new file mode 100644 index 0000000..aac77f8 --- /dev/null +++ b/js/packages/common/src/components/ConnectButton/index.tsx @@ -0,0 +1,43 @@ +import { Button, Dropdown, Menu } from "antd"; +import { ButtonProps } from "antd/lib/button"; +import React from "react"; +import { useWallet } from './../../contexts/wallet'; + +export interface ConnectButtonProps extends ButtonProps, React.RefAttributes { + allowWalletChange?: boolean; +} + +export const ConnectButton = ( + props: ConnectButtonProps +) => { + const { connected, connect, select, provider } = useWallet(); + const { onClick, children, disabled, allowWalletChange, ...rest } = props; + + // only show if wallet selected or user connected + + const menu = ( + + Change Wallet + + ); + + if(!provider || !allowWalletChange) { + return ; + } + + return ( + + Connect + + ); +}; diff --git a/js/packages/common/src/components/CurrentUserBadge/index.tsx b/js/packages/common/src/components/CurrentUserBadge/index.tsx new file mode 100644 index 0000000..e2908c7 --- /dev/null +++ b/js/packages/common/src/components/CurrentUserBadge/index.tsx @@ -0,0 +1,73 @@ +import React from 'react'; + +import { Identicon } from '../Identicon'; +import { LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { useWallet } from '../../contexts/wallet'; +import { useNativeAccount } from '../../contexts/accounts'; +import { formatNumber, shortenAddress } from '../../utils'; +import './styles.css'; +import { Popover } from 'antd'; +import { Settings } from '../Settings'; + +export const CurrentUserBadge = (props: { showBalance?: boolean, showAddress?: boolean, iconSize?: number }) => { + const { wallet } = useWallet(); + const { account } = useNativeAccount(); + + if (!wallet || !wallet.publicKey) { + return null; + } + + const iconStyle: React.CSSProperties = props.showAddress ? + { + marginLeft: '0.5rem', + display: 'flex', + width: props.iconSize, + borderRadius: 50, + + } :{ + display: 'flex', + width: props.iconSize, + paddingLeft: 0, + borderRadius: 50, + }; + + const baseWalletKey: React.CSSProperties = { height: props.iconSize, cursor: 'pointer', userSelect: 'none' }; + const walletKeyStyle: React.CSSProperties = props.showAddress ? + baseWalletKey + :{ ...baseWalletKey, paddingLeft: 0 }; + + let name = props.showAddress ? shortenAddress(`${wallet.publicKey}`) : ''; + const unknownWallet = wallet as any; + if(unknownWallet.name) { + name = unknownWallet.name; + } + + let image = ; + + if(unknownWallet.image) { + image = ; + } + + return ( +
+ {props.showBalance && + {formatNumber.format((account?.lamports || 0) / LAMPORTS_PER_SOL)} SOL + } + + } + trigger="click" + > +
+ {name && ({name})} + {image} +
+
+
+ ); +}; diff --git a/js/packages/common/src/components/CurrentUserBadge/styles.less b/js/packages/common/src/components/CurrentUserBadge/styles.less new file mode 100644 index 0000000..5940a94 --- /dev/null +++ b/js/packages/common/src/components/CurrentUserBadge/styles.less @@ -0,0 +1,15 @@ +.wallet-wrapper { + padding-left: 0.7rem; + border-radius: 0.5rem; + display: flex; + align-items: center; + white-space: nowrap; +} + +.wallet-key { + padding: 0.1rem 0.5rem 0.1rem 0.7rem; + margin-left: 0.3rem; + border-radius: 0.5rem; + display: flex; + align-items: center; +} diff --git a/js/packages/common/src/components/EtherscanLink/index.tsx b/js/packages/common/src/components/EtherscanLink/index.tsx new file mode 100644 index 0000000..321febb --- /dev/null +++ b/js/packages/common/src/components/EtherscanLink/index.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Typography } from 'antd'; +import { shortenAddress } from '../../utils/utils'; + +export const EtherscanLink = (props: { + address: string ; + type: string; + code?: boolean; + style?: React.CSSProperties; + length?: number; +}) => { + const { type, code } = props; + + const address = props.address; + + if (!address) { + return null; + } + + const length = props.length ?? 9; + + return ( + + {code ? ( + + {shortenAddress(address, length)} + + ) : ( + shortenAddress(address, length) + )} + + ); +}; diff --git a/js/packages/common/src/components/ExplorerLink/index.tsx b/js/packages/common/src/components/ExplorerLink/index.tsx new file mode 100644 index 0000000..32fcc06 --- /dev/null +++ b/js/packages/common/src/components/ExplorerLink/index.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Typography } from 'antd'; +import { shortenAddress } from '../../utils/utils'; +import { PublicKey } from '@solana/web3.js'; + +export const ExplorerLink = (props: { + address: string | PublicKey; + type: string; + code?: boolean; + style?: React.CSSProperties; + length?: number; +}) => { + const { type, code } = props; + + const address = + typeof props.address === 'string' + ? props.address + : props.address?.toBase58(); + + if (!address) { + return null; + } + + const length = props.length ?? 9; + + return ( + + {code ? ( + + {shortenAddress(address, length)} + + ) : ( + shortenAddress(address, length) + )} + + ); +}; diff --git a/js/packages/common/src/components/Icons/info.tsx b/js/packages/common/src/components/Icons/info.tsx new file mode 100644 index 0000000..4bb0e3a --- /dev/null +++ b/js/packages/common/src/components/Icons/info.tsx @@ -0,0 +1,20 @@ +import { Button, Popover } from "antd"; +import React from "react"; + +import { InfoCircleOutlined } from "@ant-design/icons"; + +export const Info = (props: { + text: React.ReactElement; + style?: React.CSSProperties; +}) => { + return ( + {props.text}
} + > + + + ); +}; diff --git a/js/packages/common/src/components/Identicon/index.tsx b/js/packages/common/src/components/Identicon/index.tsx new file mode 100644 index 0000000..0108214 --- /dev/null +++ b/js/packages/common/src/components/Identicon/index.tsx @@ -0,0 +1,43 @@ +import React, { useEffect, useRef } from 'react'; + +import Jazzicon from 'jazzicon'; +import bs58 from 'bs58'; +import './style.css'; +import { PublicKey } from '@solana/web3.js'; + +export const Identicon = (props: { + address?: string | PublicKey; + style?: React.CSSProperties; + className?: string; + alt?: string; +}) => { + const { style, className, alt } = props; + const address = + typeof props.address === 'string' + ? props.address + : props.address?.toBase58(); + const ref = useRef(); + + useEffect(() => { + if (address && ref.current) { + try { + + ref.current.innerHTML = ''; + ref.current.className = className || ''; + ref.current.appendChild( + Jazzicon( + style?.width || 16, + parseInt(bs58.decode(address).toString('hex').slice(5, 15), 16), + ), + ); + + } catch (err) { + // TODO + } + } + }, [address, style, className]); + + return ( +
+ ); +}; diff --git a/js/packages/common/src/components/Identicon/style.less b/js/packages/common/src/components/Identicon/style.less new file mode 100644 index 0000000..4b04246 --- /dev/null +++ b/js/packages/common/src/components/Identicon/style.less @@ -0,0 +1,8 @@ +.identicon-wrapper { + display: flex; + height: 1rem; + width: 1rem; + border-radius: 1.125rem; + margin: 0.2rem 0.2rem 0.2rem 0.1rem; + /* background-color: ${({ theme }) => theme.bg4}; */ +} diff --git a/js/packages/common/src/components/Input/numeric.tsx b/js/packages/common/src/components/Input/numeric.tsx new file mode 100644 index 0000000..c307e3e --- /dev/null +++ b/js/packages/common/src/components/Input/numeric.tsx @@ -0,0 +1,43 @@ +import React from "react"; +import { Input } from "antd"; + +export class NumericInput extends React.Component { + onChange = (e: any) => { + const { value } = e.target; + const reg = /^-?\d*(\.\d*)?$/; + if (reg.test(value) || value === "" || value === "-") { + this.props.onChange(value); + } + }; + + // '.' at the end or only '-' in the input box. + onBlur = () => { + const { value, onBlur, onChange } = this.props; + let valueTemp = value; + if (value === undefined || value === null) return; + if ( + value.charAt && + (value.charAt(value.length - 1) === "." || value === "-") + ) { + valueTemp = value.slice(0, -1); + } + if (value.startsWith && (value.startsWith(".") || value.startsWith("-."))) { + valueTemp = valueTemp.replace(".", "0."); + } + if (valueTemp.replace) onChange?.(valueTemp.replace(/0*(\d+)/, "$1")); + if (onBlur) { + onBlur(); + } + }; + + render() { + return ( + + ); + } +} diff --git a/js/packages/common/src/components/MetaplexModal/index.less b/js/packages/common/src/components/MetaplexModal/index.less new file mode 100644 index 0000000..13f8a90 --- /dev/null +++ b/js/packages/common/src/components/MetaplexModal/index.less @@ -0,0 +1,9 @@ +.ant-scrolling-effect { + #root>.ant-layout { + filter: blur(10px) brightness(0.5); + } +} + +.ant-modal-content { + border-radius: 16px; +} diff --git a/js/packages/common/src/components/MetaplexModal/index.tsx b/js/packages/common/src/components/MetaplexModal/index.tsx new file mode 100644 index 0000000..8e71748 --- /dev/null +++ b/js/packages/common/src/components/MetaplexModal/index.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { Modal } from 'antd'; + +import './index.css'; + +export const MetaplexModal = (props: any) => { + + const { children, bodyStyle, ...rest } = props + + return ( + + {children} + + ); +}; diff --git a/js/packages/common/src/components/MetaplexOverlay/index.tsx b/js/packages/common/src/components/MetaplexOverlay/index.tsx new file mode 100644 index 0000000..2c9d787 --- /dev/null +++ b/js/packages/common/src/components/MetaplexOverlay/index.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Modal } from 'antd'; + +export const MetaplexOverlay = (props: any) => { + + const { children, ...rest } = props + + const content =
+ {children} +
+ + return ( + content} + width={'100vw'} + mask={false} + {...rest} + > + ); +}; diff --git a/js/packages/common/src/components/Settings/index.tsx b/js/packages/common/src/components/Settings/index.tsx new file mode 100644 index 0000000..0ca0c74 --- /dev/null +++ b/js/packages/common/src/components/Settings/index.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { Button, Select } from 'antd'; +import { useWallet } from '../../contexts/wallet'; +import { ENDPOINTS, useConnectionConfig } from '../../contexts/connection'; +import { shortenAddress } from '../../utils'; +import { CopyOutlined } from '@ant-design/icons'; + +export const Settings = ({ + additionalSettings, +}: { + additionalSettings?: JSX.Element; +}) => { + const { connected, disconnect, select, wallet } = useWallet(); + const { endpoint, setEndpoint } = useConnectionConfig(); + + return ( + <> +
+ Network:{' '} + + {connected && ( + <> + Wallet: + {wallet?.publicKey && ( + + )} + + + + + )} + {additionalSettings} +
+ + ); +}; diff --git a/js/packages/common/src/components/TokenDisplay/index.tsx b/js/packages/common/src/components/TokenDisplay/index.tsx new file mode 100644 index 0000000..223dd81 --- /dev/null +++ b/js/packages/common/src/components/TokenDisplay/index.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { useMint } from '../../contexts/accounts'; +import { useAccountByMint } from '../../hooks'; +import { TokenIcon } from '../TokenIcon'; + +export const TokenDisplay = (props: { + name: string; + mintAddress: string; + icon?: JSX.Element; + showBalance?: boolean; +}) => { + const { showBalance, mintAddress, name, icon } = props; + const tokenMint = useMint(mintAddress); + const tokenAccount = useAccountByMint(mintAddress); + + let balance: number = 0; + let hasBalance: boolean = false; + if (showBalance) { + if (tokenAccount && tokenMint) { + balance = + tokenAccount.info.amount.toNumber() / Math.pow(10, tokenMint.decimals); + hasBalance = balance > 0; + } + } + + return ( + <> +
+
+ {icon || } + {name} +
+ {showBalance ? ( + +  {' '} + {hasBalance + ? balance < 0.001 + ? '<0.001' + : balance.toFixed(3) + : '-'} + + ) : null} +
+ + ); +}; diff --git a/js/packages/common/src/components/TokenIcon/index.tsx b/js/packages/common/src/components/TokenIcon/index.tsx new file mode 100644 index 0000000..21da7ec --- /dev/null +++ b/js/packages/common/src/components/TokenIcon/index.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { PublicKey } from '@solana/web3.js'; +import {getTokenIcon, KnownTokenMap} from '../../utils'; +import { useConnectionConfig } from '../../contexts/connection'; +import { Identicon } from '../Identicon'; + +export const TokenIcon = (props: { + mintAddress?: string | PublicKey; + style?: React.CSSProperties; + size?: number; + className?: string; + tokenMap?: KnownTokenMap, +}) => { + let icon: string | undefined = ''; + if (props.tokenMap) { + icon = getTokenIcon(props.tokenMap, props.mintAddress); + } else { + const { tokenMap } = useConnectionConfig(); + icon = getTokenIcon(tokenMap, props.mintAddress); + } + + const size = props.size || 20; + + if (icon) { + return ( + Token icon + ); + } + return ( + + ); +}; + +export const PoolIcon = (props: { + mintA: string; + mintB: string; + style?: React.CSSProperties; + className?: string; +}) => { + return ( +
+ + +
+ ); +}; diff --git a/js/packages/common/src/components/index.tsx b/js/packages/common/src/components/index.tsx new file mode 100644 index 0000000..bf58f3e --- /dev/null +++ b/js/packages/common/src/components/index.tsx @@ -0,0 +1,15 @@ +export { ExplorerLink } from './ExplorerLink/index'; +export { ConnectButton } from './ConnectButton/index'; +export { CurrentUserBadge } from './CurrentUserBadge/index'; +export { Identicon } from './Identicon/index'; +export { Info } from './Icons/info'; +export { NumericInput } from './Input/numeric'; +export { AppBar } from './AppBar/index'; +export { Settings } from './Settings/index'; +export { ActionConfirmation } from './ActionConfirmation/index'; +export { BackButton } from './BackButton/index'; +export { TokenIcon } from './TokenIcon'; +export { TokenDisplay } from './TokenDisplay'; +export { EtherscanLink } from './EtherscanLink'; +export { MetaplexModal } from './MetaplexModal'; +export { MetaplexOverlay } from './MetaplexOverlay'; diff --git a/js/packages/common/src/constants/index.ts b/js/packages/common/src/constants/index.ts new file mode 100644 index 0000000..7d6bf06 --- /dev/null +++ b/js/packages/common/src/constants/index.ts @@ -0,0 +1,2 @@ +export * from './math'; +export * from './labels'; diff --git a/js/packages/common/src/constants/labels.ts b/js/packages/common/src/constants/labels.ts new file mode 100644 index 0000000..be5c639 --- /dev/null +++ b/js/packages/common/src/constants/labels.ts @@ -0,0 +1,15 @@ +export const LABELS = { + CONNECT_LABEL: 'Connect Wallet', + AUDIT_WARNING: + 'Oyster is an unaudited software project used for internal purposes at the Solana Foundation. This app is not for public use.', + FOOTER: + 'This page was produced by the Solana Foundation ("SF") for internal educational and inspiration purposes only. SF does not encourage, induce or sanction the deployment, integration or use of Oyster or any similar application (including its code) in violation of applicable laws or regulations and hereby prohibits any such deployment, integration or use. Anyone using this code or a derivation thereof must comply with applicable laws and regulations when releasing related software.', + MENU_HOME: 'Home', + MENU_DASHBOARD: 'Dashboard', + CONNECT_BUTTON: 'Connect', + WALLET_TOOLTIP: 'Wallet public key', + WALLET_BALANCE: 'Wallet balance', + SETTINGS_TOOLTIP: 'Settings', + DASHBOARD_ACTION: 'Go to dashboard', + GO_BACK_ACTION: 'Go back', +}; diff --git a/js/packages/common/src/constants/math.ts b/js/packages/common/src/constants/math.ts new file mode 100644 index 0000000..6e06293 --- /dev/null +++ b/js/packages/common/src/constants/math.ts @@ -0,0 +1,7 @@ +import BN from 'bn.js'; + +export const TEN = new BN(10); +export const HALF_WAD = TEN.pow(new BN(18)); +export const WAD = TEN.pow(new BN(18)); +export const RAY = TEN.pow(new BN(27)); +export const ZERO = new BN(0); diff --git a/js/packages/common/src/contexts/accounts.tsx b/js/packages/common/src/contexts/accounts.tsx new file mode 100644 index 0000000..6678cc7 --- /dev/null +++ b/js/packages/common/src/contexts/accounts.tsx @@ -0,0 +1,664 @@ +import React, { + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react'; +import { useConnection } from '../contexts/connection'; +import { useWallet } from '../contexts/wallet'; +import { AccountInfo, Connection, PublicKey } from '@solana/web3.js'; +import { AccountLayout, MintInfo, MintLayout, u64 } from '@solana/spl-token'; +import { TokenAccount } from '../models'; +import { chunks } from '../utils/utils'; +import { EventEmitter } from '../utils/eventEmitter'; +import { useUserAccounts } from '../hooks/useUserAccounts'; +import { + WRAPPED_SOL_MINT, + programIds, + LEND_HOST_FEE_ADDRESS, +} from '../utils/ids'; + +const AccountsContext = React.createContext(null); + +const pendingCalls = new Map>(); +const genericCache = new Map(); +const pendingMintCalls = new Map>(); +const mintCache = new Map(); + +export interface ParsedAccountBase { + pubkey: PublicKey; + account: AccountInfo; + info: any; // TODO: change to unkown +} + +export type AccountParser = ( + pubkey: PublicKey, + data: AccountInfo, +) => ParsedAccountBase | undefined; + +export interface ParsedAccount extends ParsedAccountBase { + info: T; +} + +const getMintInfo = async (connection: Connection, pubKey: PublicKey) => { + const info = await connection.getAccountInfo(pubKey); + if (info === null) { + throw new Error('Failed to find mint account'); + } + + const data = Buffer.from(info.data); + + return deserializeMint(data); +}; + +export const MintParser = (pubKey: PublicKey, info: AccountInfo) => { + const buffer = Buffer.from(info.data); + + const data = deserializeMint(buffer); + + const details = { + pubkey: pubKey, + account: { + ...info, + }, + info: data, + } as ParsedAccountBase; + + return details; +}; + +export const TokenAccountParser = ( + pubKey: PublicKey, + info: AccountInfo, +) => { + const buffer = Buffer.from(info.data); + const data = deserializeAccount(buffer); + + const details = { + pubkey: pubKey, + account: { + ...info, + }, + info: data, + } as TokenAccount; + + return details; +}; + +export const GenericAccountParser = ( + pubKey: PublicKey, + info: AccountInfo, +) => { + const buffer = Buffer.from(info.data); + + const details = { + pubkey: pubKey, + account: { + ...info, + }, + info: buffer, + } as ParsedAccountBase; + + return details; +}; + +export const keyToAccountParser = new Map(); + +export const cache = { + emitter: new EventEmitter(), + query: async ( + connection: Connection, + pubKey: string | PublicKey, + parser?: AccountParser, + ) => { + let id: PublicKey; + if (typeof pubKey === 'string') { + id = new PublicKey(pubKey); + } else { + id = pubKey; + } + + const address = id.toBase58(); + + let account = genericCache.get(address); + if (account) { + return account; + } + + let query = pendingCalls.get(address); + if (query) { + return query; + } + + // TODO: refactor to use multiple accounts query with flush like behavior + query = connection.getAccountInfo(id).then(data => { + if (!data) { + throw new Error('Account not found'); + } + + return cache.add(id, data, parser); + }) as Promise; + pendingCalls.set(address, query as any); + + return query; + }, + add: ( + id: PublicKey | string, + obj: AccountInfo, + parser?: AccountParser, + ) => { + if (obj.data.length === 0) { + return; + } + + const address = typeof id === 'string' ? id : id?.toBase58(); + const deserialize = parser ? parser : keyToAccountParser.get(address); + if (!deserialize) { + throw new Error( + 'Deserializer needs to be registered or passed as a parameter', + ); + } + + cache.registerParser(id, deserialize); + pendingCalls.delete(address); + const account = deserialize(new PublicKey(address), obj); + if (!account) { + return; + } + + const isNew = !genericCache.has(address); + + genericCache.set(address, account); + cache.emitter.raiseCacheUpdated(address, isNew, deserialize); + return account; + }, + get: (pubKey: string | PublicKey) => { + let key: string; + if (typeof pubKey !== 'string') { + key = pubKey.toBase58(); + } else { + key = pubKey; + } + + return genericCache.get(key); + }, + delete: (pubKey: string | PublicKey) => { + let key: string; + if (typeof pubKey !== 'string') { + key = pubKey.toBase58(); + } else { + key = pubKey; + } + + if (genericCache.get(key)) { + genericCache.delete(key); + cache.emitter.raiseCacheDeleted(key); + return true; + } + return false; + }, + + byParser: (parser: AccountParser) => { + const result: string[] = []; + for (const id of keyToAccountParser.keys()) { + if (keyToAccountParser.get(id) === parser) { + result.push(id); + } + } + + return result; + }, + registerParser: (pubkey: PublicKey | string, parser: AccountParser) => { + if (pubkey) { + const address = typeof pubkey === 'string' ? pubkey : pubkey?.toBase58(); + keyToAccountParser.set(address, parser); + } + + return pubkey; + }, + queryMint: async (connection: Connection, pubKey: string | PublicKey) => { + let id: PublicKey; + if (typeof pubKey === 'string') { + id = new PublicKey(pubKey); + } else { + id = pubKey; + } + + const address = id.toBase58(); + let mint = mintCache.get(address); + if (mint) { + return mint; + } + + let query = pendingMintCalls.get(address); + if (query) { + return query; + } + + query = getMintInfo(connection, id).then(data => { + pendingMintCalls.delete(address); + + mintCache.set(address, data); + return data; + }) as Promise; + pendingMintCalls.set(address, query as any); + + return query; + }, + getMint: (pubKey: string | PublicKey) => { + let key: string; + if (typeof pubKey !== 'string') { + key = pubKey.toBase58(); + } else { + key = pubKey; + } + + return mintCache.get(key); + }, + addMint: (pubKey: PublicKey, obj: AccountInfo) => { + const mint = deserializeMint(obj.data); + const id = pubKey.toBase58(); + mintCache.set(id, mint); + return mint; + }, +}; + +export const useAccountsContext = () => { + const context = useContext(AccountsContext); + + return context; +}; + +function wrapNativeAccount( + pubkey: PublicKey, + account?: AccountInfo, +): TokenAccount | undefined { + if (!account) { + return undefined; + } + + return { + pubkey: pubkey, + account, + info: { + address: pubkey, + mint: WRAPPED_SOL_MINT, + owner: pubkey, + amount: new u64(account.lamports), + delegate: null, + delegatedAmount: new u64(0), + isInitialized: true, + isFrozen: false, + isNative: true, + rentExemptReserve: null, + closeAuthority: null, + }, + }; +} + +export const getCachedAccount = ( + predicate: (account: TokenAccount) => boolean, +) => { + for (const account of genericCache.values()) { + if (predicate(account)) { + return account as TokenAccount; + } + } +}; + +const UseNativeAccount = () => { + const connection = useConnection(); + const { wallet } = useWallet(); + + const [nativeAccount, setNativeAccount] = useState>(); + + const updateCache = useCallback( + account => { + if (wallet && wallet.publicKey) { + const wrapped = wrapNativeAccount(wallet.publicKey, account); + if (wrapped !== undefined && wallet) { + const id = wallet.publicKey?.toBase58(); + cache.registerParser(id, TokenAccountParser); + genericCache.set(id, wrapped as TokenAccount); + cache.emitter.raiseCacheUpdated(id, false, TokenAccountParser); + } + } + }, + [wallet], + ); + + useEffect(() => { + let subId = 0; + const updateAccount = (account: AccountInfo | null) => { + if (account) { + updateCache(account); + setNativeAccount(account); + } + }; + + (async () => { + if (!connection || !wallet?.publicKey) { + return; + } + + const account = await connection.getAccountInfo(wallet.publicKey) + updateAccount(account); + + subId = connection.onAccountChange(wallet.publicKey, updateAccount); + })(); + + return () => { + if (subId) { + connection.removeAccountChangeListener(subId); + } + } + }, [setNativeAccount, wallet, wallet?.publicKey, connection, updateCache]); + + return { nativeAccount }; +}; + +const PRECACHED_OWNERS = new Set(); +const precacheUserTokenAccounts = async ( + connection: Connection, + owner?: PublicKey, +) => { + if (!owner) { + return; + } + + // used for filtering account updates over websocket + PRECACHED_OWNERS.add(owner.toBase58()); + + // user accounts are updated via ws subscription + const accounts = await connection.getTokenAccountsByOwner(owner, { + programId: programIds().token, + }); + accounts.value.forEach(info => { + cache.add(info.pubkey.toBase58(), info.account, TokenAccountParser); + }); +}; + +export function AccountsProvider({ children = null as any }) { + const connection = useConnection(); + const { wallet, connected } = useWallet(); + const [tokenAccounts, setTokenAccounts] = useState([]); + const [userAccounts, setUserAccounts] = useState([]); + const { nativeAccount } = UseNativeAccount(); + + const selectUserAccounts = useCallback(() => { + return cache + .byParser(TokenAccountParser) + .map(id => cache.get(id)) + .filter( + a => a && a.info.owner.toBase58() === wallet?.publicKey?.toBase58(), + ) + .map(a => a as TokenAccount); + }, [wallet]); + + useEffect(() => { + const accounts = selectUserAccounts().filter( + a => a !== undefined, + ) as TokenAccount[]; + setUserAccounts(accounts); + }, [nativeAccount, wallet, tokenAccounts, selectUserAccounts]); + + useEffect(() => { + const subs: number[] = []; + cache.emitter.onCache(args => { + if (args.isNew) { + let id = args.id; + let deserialize = args.parser; + connection.onAccountChange(new PublicKey(id), info => { + cache.add(id, info, deserialize); + }); + } + }); + + return () => { + subs.forEach(id => connection.removeAccountChangeListener(id)); + }; + }, [connection]); + + const publicKey = wallet?.publicKey; + useEffect(() => { + if (!connection || !publicKey) { + setTokenAccounts([]); + } else { + precacheUserTokenAccounts(connection, LEND_HOST_FEE_ADDRESS); + + precacheUserTokenAccounts(connection, publicKey).then(() => { + setTokenAccounts(selectUserAccounts()); + }); + + // This can return different types of accounts: token-account, mint, multisig + // TODO: web3.js expose ability to filter. + // this should use only filter syntax to only get accounts that are owned by user + const tokenSubID = connection.onProgramAccountChange( + programIds().token, + info => { + // TODO: fix type in web3.js + const id = (info.accountId as unknown) as string; + // TODO: do we need a better way to identify layout (maybe a enum identifing type?) + if (info.accountInfo.data.length === AccountLayout.span) { + const data = deserializeAccount(info.accountInfo.data); + + if (PRECACHED_OWNERS.has(data.owner.toBase58())) { + cache.add(id, info.accountInfo, TokenAccountParser); + setTokenAccounts(selectUserAccounts()); + } + } + }, + 'singleGossip', + ); + + return () => { + connection.removeProgramAccountChangeListener(tokenSubID); + }; + } + }, [connection, connected, publicKey, selectUserAccounts]); + + return ( + + {children} + + ); +} + +export function useNativeAccount() { + const context = useContext(AccountsContext); + return { + account: context.nativeAccount as AccountInfo, + }; +} + +export const getMultipleAccounts = async ( + connection: any, + keys: string[], + commitment: string, +) => { + const result = await Promise.all( + chunks(keys, 99).map(chunk => + getMultipleAccountsCore(connection, chunk, commitment), + ), + ); + + const array = result + .map( + a => + a.array.map(acc => { + if (!acc) { + return undefined; + } + + const { data, ...rest } = acc; + const obj = { + ...rest, + data: Buffer.from(data[0], 'base64'), + } as AccountInfo; + return obj; + }) as AccountInfo[], + ) + .flat(); + return { keys, array }; +}; + +const getMultipleAccountsCore = async ( + connection: any, + keys: string[], + commitment: string, +) => { + const args = connection._buildArgs([keys], commitment, 'base64'); + + const unsafeRes = await connection._rpcRequest('getMultipleAccounts', args); + if (unsafeRes.error) { + throw new Error( + 'failed to get info about account ' + unsafeRes.error.message, + ); + } + + if (unsafeRes.result.value) { + const array = unsafeRes.result.value as AccountInfo[]; + return { keys, array }; + } + + // TODO: fix + throw new Error(); +}; + +export function useMint(key?: string | PublicKey) { + const connection = useConnection(); + const [mint, setMint] = useState(); + + const id = typeof key === 'string' ? key : key?.toBase58(); + + useEffect(() => { + if (!id) { + return; + } + + cache + .query(connection, id, MintParser) + .then(acc => setMint(acc.info as any)) + .catch(err => console.log(err)); + + const dispose = cache.emitter.onCache(e => { + const event = e; + if (event.id === id) { + cache + .query(connection, id, MintParser) + .then(mint => setMint(mint.info as any)); + } + }); + return () => { + dispose(); + }; + }, [connection, id]); + + return mint; +} + +export function useAccount(pubKey?: PublicKey) { + const connection = useConnection(); + const [account, setAccount] = useState(); + + const key = pubKey?.toBase58(); + useEffect(() => { + const query = async () => { + try { + if (!key) { + return; + } + + const acc = await cache + .query(connection, key, TokenAccountParser) + .catch(err => console.log(err)); + if (acc) { + setAccount(acc); + } + } catch (err) { + console.error(err); + } + }; + + query(); + + const dispose = cache.emitter.onCache(e => { + const event = e; + if (event.id === key) { + query(); + } + }); + return () => { + dispose(); + }; + }, [connection, key]); + + return account; +} + +// TODO: expose in spl package +export const deserializeAccount = (data: Buffer) => { + const accountInfo = AccountLayout.decode(data); + accountInfo.mint = new PublicKey(accountInfo.mint); + accountInfo.owner = new PublicKey(accountInfo.owner); + accountInfo.amount = u64.fromBuffer(accountInfo.amount); + + if (accountInfo.delegateOption === 0) { + accountInfo.delegate = null; + accountInfo.delegatedAmount = new u64(0); + } else { + accountInfo.delegate = new PublicKey(accountInfo.delegate); + accountInfo.delegatedAmount = u64.fromBuffer(accountInfo.delegatedAmount); + } + + accountInfo.isInitialized = accountInfo.state !== 0; + accountInfo.isFrozen = accountInfo.state === 2; + + if (accountInfo.isNativeOption === 1) { + accountInfo.rentExemptReserve = u64.fromBuffer(accountInfo.isNative); + accountInfo.isNative = true; + } else { + accountInfo.rentExemptReserve = null; + accountInfo.isNative = false; + } + + if (accountInfo.closeAuthorityOption === 0) { + accountInfo.closeAuthority = null; + } else { + accountInfo.closeAuthority = new PublicKey(accountInfo.closeAuthority); + } + + return accountInfo; +}; + +// TODO: expose in spl package +export const deserializeMint = (data: Buffer) => { + if (data.length !== MintLayout.span) { + throw new Error('Not a valid Mint'); + } + + const mintInfo = MintLayout.decode(data); + + if (mintInfo.mintAuthorityOption === 0) { + mintInfo.mintAuthority = null; + } else { + mintInfo.mintAuthority = new PublicKey(mintInfo.mintAuthority); + } + + mintInfo.supply = u64.fromBuffer(mintInfo.supply); + mintInfo.isInitialized = mintInfo.isInitialized !== 0; + + if (mintInfo.freezeAuthorityOption === 0) { + mintInfo.freezeAuthority = null; + } else { + mintInfo.freezeAuthority = new PublicKey(mintInfo.freezeAuthority); + } + + return mintInfo as MintInfo; +}; diff --git a/js/packages/common/src/contexts/connection.tsx b/js/packages/common/src/contexts/connection.tsx new file mode 100644 index 0000000..b28c276 --- /dev/null +++ b/js/packages/common/src/contexts/connection.tsx @@ -0,0 +1,670 @@ +import { sleep, useLocalStorageState } from '../utils/utils'; +import { + Keypair, + BlockhashAndFeeCalculator, + clusterApiUrl, + Commitment, + Connection, + RpcResponseAndContext, + SignatureStatus, + SimulatedTransactionResponse, + Transaction, + TransactionInstruction, + TransactionSignature, +} from '@solana/web3.js'; +import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { notify } from '../utils/notifications'; +import { ExplorerLink } from '../components/ExplorerLink'; +import { setProgramIds } from '../utils/ids'; +import { + TokenInfo, + TokenListProvider, + ENV as ChainId, +} from '@solana/spl-token-registry'; + +export type ENV = + | 'mainnet-beta' + | 'mainnet-beta (Solana)' + | 'mainnet-beta (Serum)' + | 'testnet' + | 'devnet' + | 'localnet' + | 'lending'; + +export const ENDPOINTS = [ + { + name: 'mainnet-beta' as ENV, + endpoint: 'https://api.metaplex.solana.com/', + ChainId: ChainId.MainnetBeta, + }, + { + name: 'mainnet-beta (Solana)' as ENV, + endpoint: 'https://api.mainnet-beta.solana.com', + ChainId: ChainId.MainnetBeta, + }, + { + name: 'mainnet-beta (Serum)' as ENV, + endpoint: 'https://solana-api.projectserum.com/', + ChainId: ChainId.MainnetBeta, + }, + { + name: 'testnet' as ENV, + endpoint: clusterApiUrl('testnet'), + ChainId: ChainId.Testnet, + }, + { + name: 'devnet' as ENV, + endpoint: clusterApiUrl('devnet'), + ChainId: ChainId.Devnet, + }, +]; + +const DEFAULT = ENDPOINTS[0].endpoint; +const DEFAULT_SLIPPAGE = 0.25; + +interface ConnectionConfig { + connection: Connection; + sendConnection: Connection; + endpoint: string; + slippage: number; + setSlippage: (val: number) => void; + env: ENV; + setEndpoint: (val: string) => void; + tokens: TokenInfo[]; + tokenMap: Map; +} + +const ConnectionContext = React.createContext({ + endpoint: DEFAULT, + setEndpoint: () => {}, + slippage: DEFAULT_SLIPPAGE, + setSlippage: (val: number) => {}, + connection: new Connection(DEFAULT, 'recent'), + sendConnection: new Connection(DEFAULT, 'recent'), + env: ENDPOINTS[0].name, + tokens: [], + tokenMap: new Map(), +}); + +export function ConnectionProvider({ children = undefined as any }) { + const [endpoint, setEndpoint] = useLocalStorageState( + 'connectionEndpoint', + ENDPOINTS[0].endpoint, + ); + + const [slippage, setSlippage] = useLocalStorageState( + 'slippage', + DEFAULT_SLIPPAGE.toString(), + ); + + const connection = useMemo( + () => new Connection(endpoint, 'recent'), + [endpoint], + ); + const sendConnection = useMemo( + () => new Connection(endpoint, 'recent'), + [endpoint], + ); + + const env = + ENDPOINTS.find(end => end.endpoint === endpoint)?.name || ENDPOINTS[0].name; + + const [tokens, setTokens] = useState([]); + const [tokenMap, setTokenMap] = useState>(new Map()); + useEffect(() => { + // fetch token files + new TokenListProvider().resolve().then(container => { + const list = container + .excludeByTag('nft') + .filterByChainId( + ENDPOINTS.find(end => end.endpoint === endpoint)?.ChainId || + ChainId.MainnetBeta, + ) + .getList(); + + const knownMints = [...list].reduce((map, item) => { + map.set(item.address, item); + return map; + }, new Map()); + + setTokenMap(knownMints); + setTokens(list); + }); + }, [env]); + + setProgramIds(env); + + // The websocket library solana/web3.js uses closes its websocket connection when the subscription list + // is empty after opening its first time, preventing subsequent subscriptions from receiving responses. + // This is a hack to prevent the list from every getting empty + useEffect(() => { + const id = connection.onAccountChange( + Keypair.generate().publicKey, + () => {}, + ); + return () => { + connection.removeAccountChangeListener(id); + }; + }, [connection]); + + useEffect(() => { + const id = connection.onSlotChange(() => null); + return () => { + connection.removeSlotChangeListener(id); + }; + }, [connection]); + + useEffect(() => { + const id = sendConnection.onAccountChange( + Keypair.generate().publicKey, + () => {}, + ); + return () => { + sendConnection.removeAccountChangeListener(id); + }; + }, [sendConnection]); + + useEffect(() => { + const id = sendConnection.onSlotChange(() => null); + return () => { + sendConnection.removeSlotChangeListener(id); + }; + }, [sendConnection]); + + return ( + setSlippage(val.toString()), + connection, + sendConnection, + tokens, + tokenMap, + env, + }} + > + {children} + + ); +} + +export function useConnection() { + return useContext(ConnectionContext).connection as Connection; +} + +export function useSendConnection() { + return useContext(ConnectionContext)?.sendConnection; +} + +export function useConnectionConfig() { + const context = useContext(ConnectionContext); + return { + endpoint: context.endpoint, + setEndpoint: context.setEndpoint, + env: context.env, + tokens: context.tokens, + tokenMap: context.tokenMap, + }; +} + +export function useSlippageConfig() { + const { slippage, setSlippage } = useContext(ConnectionContext); + return { slippage, setSlippage }; +} + +export const getErrorForTransaction = async ( + connection: Connection, + txid: string, +) => { + // wait for all confirmation before geting transaction + await connection.confirmTransaction(txid, 'max'); + + const tx = await connection.getParsedConfirmedTransaction(txid); + + const errors: string[] = []; + if (tx?.meta && tx.meta.logMessages) { + tx.meta.logMessages.forEach(log => { + const regex = /Error: (.*)/gm; + let m; + while ((m = regex.exec(log)) !== null) { + // This is necessary to avoid infinite loops with zero-width matches + if (m.index === regex.lastIndex) { + regex.lastIndex++; + } + + if (m.length > 1) { + errors.push(m[1]); + } + } + }); + } + + return errors; +}; + +export enum SequenceType { + Sequential, + Parallel, + StopOnFailure, +} + +export const sendTransactions = async ( + connection: Connection, + wallet: any, + instructionSet: TransactionInstruction[][], + signersSet: Keypair[][], + sequenceType: SequenceType = SequenceType.Parallel, + commitment: Commitment = 'singleGossip', + successCallback: (txid: string, ind: number) => void = (txid, ind) => {}, + failCallback: (reason: string, ind: number) => boolean = (txid, ind) => false, + block?: BlockhashAndFeeCalculator, +): Promise => { + const unsignedTxns: Transaction[] = []; + + if (!block) { + block = await connection.getRecentBlockhash(commitment); + } + + for (let i = 0; i < instructionSet.length; i++) { + const instructions = instructionSet[i]; + const signers = signersSet[i]; + + if (instructions.length === 0) { + continue; + } + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = block.blockhash; + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + + unsignedTxns.push(transaction); + } + + const signedTxns = await wallet.signAllTransactions(unsignedTxns); + + const pendingTxns: Promise<{ txid: string; slot: number }>[] = []; + + let breakEarlyObject = { breakEarly: false, i: 0 }; + console.log( + 'Signed txns length', + signedTxns.length, + 'vs handed in length', + instructionSet.length, + ); + for (let i = 0; i < signedTxns.length; i++) { + const signedTxnPromise = sendSignedTransaction({ + connection, + signedTransaction: signedTxns[i], + }); + + signedTxnPromise + .then(({ txid, slot }) => { + successCallback(txid, i); + }) + .catch(reason => { + failCallback(signedTxns[i], i); + if (sequenceType === SequenceType.StopOnFailure) { + breakEarlyObject.breakEarly = true; + breakEarlyObject.i = i; + } + }); + + if (sequenceType !== SequenceType.Parallel) { + try { + await signedTxnPromise; + } catch (e) { + console.log('Caught failure', e); + if (breakEarlyObject.breakEarly) { + console.log('Died on ', breakEarlyObject.i); + return breakEarlyObject.i; // Return the txn we failed on by index + } + } + } else { + pendingTxns.push(signedTxnPromise); + } + } + + if (sequenceType !== SequenceType.Parallel) { + await Promise.all(pendingTxns); + } + + return signedTxns.length; +}; + +export const sendTransaction = async ( + connection: Connection, + wallet: any, + instructions: TransactionInstruction[], + signers: Keypair[], + awaitConfirmation = true, + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, +) => { + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + if (!includesFeePayer) { + transaction = await wallet.signTransaction(transaction); + } + + const rawTransaction = transaction.serialize(); + let options = { + skipPreflight: true, + commitment, + }; + + const txid = await connection.sendRawTransaction(rawTransaction, options); + let slot = 0; + + if (awaitConfirmation) { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + DEFAULT_TIMEOUT, + connection, + commitment, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + slot = confirmation?.slot || 0; + + if (confirmation?.err) { + const errors = await getErrorForTransaction(connection, txid); + notify({ + message: 'Transaction failed...', + description: ( + <> + {errors.map(err => ( +
{err}
+ ))} + + + ), + type: 'error', + }); + + throw new Error( + `Raw transaction ${txid} failed (${JSON.stringify(status)})`, + ); + } + } + + return { txid, slot }; +}; + +export const sendTransactionWithRetry = async ( + connection: Connection, + wallet: any, + instructions: TransactionInstruction[], + signers: Keypair[], + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, + beforeSend?: () => void, +) => { + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + if (!includesFeePayer) { + transaction = await wallet.signTransaction(transaction); + } + + if (beforeSend) { + beforeSend(); + } + + const { txid, slot } = await sendSignedTransaction({ + connection, + signedTransaction: transaction, + }); + + return { txid, slot }; +}; + +export const getUnixTs = () => { + return new Date().getTime() / 1000; +}; + +const DEFAULT_TIMEOUT = 15000; + +export async function sendSignedTransaction({ + signedTransaction, + connection, + timeout = DEFAULT_TIMEOUT, +}: { + signedTransaction: Transaction; + connection: Connection; + sendingMessage?: string; + sentMessage?: string; + successMessage?: string; + timeout?: number; +}): Promise<{ txid: string; slot: number }> { + const rawTransaction = signedTransaction.serialize(); + const startTime = getUnixTs(); + let slot = 0; + const txid: TransactionSignature = await connection.sendRawTransaction( + rawTransaction, + { + skipPreflight: true, + }, + ); + + console.log('Started awaiting confirmation for', txid); + + let done = false; + (async () => { + while (!done && getUnixTs() - startTime < timeout) { + connection.sendRawTransaction(rawTransaction, { + skipPreflight: true, + }); + await sleep(500); + } + })(); + try { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + timeout, + connection, + 'recent', + true, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + + if (confirmation.err) { + console.error(confirmation.err); + throw new Error('Transaction failed: Custom instruction error'); + } + + slot = confirmation?.slot || 0; + } catch (err) { + console.error('Timeout Error caught', err); + if (err.timeout) { + throw new Error('Timed out awaiting confirmation on transaction'); + } + let simulateResult: SimulatedTransactionResponse | null = null; + try { + simulateResult = ( + await simulateTransaction(connection, signedTransaction, 'single') + ).value; + } catch (e) {} + if (simulateResult && simulateResult.err) { + if (simulateResult.logs) { + for (let i = simulateResult.logs.length - 1; i >= 0; --i) { + const line = simulateResult.logs[i]; + if (line.startsWith('Program log: ')) { + throw new Error( + 'Transaction failed: ' + line.slice('Program log: '.length), + ); + } + } + } + throw new Error(JSON.stringify(simulateResult.err)); + } + // throw new Error('Transaction failed'); + } finally { + done = true; + } + + console.log('Latency', txid, getUnixTs() - startTime); + return { txid, slot }; +} + +async function simulateTransaction( + connection: Connection, + transaction: Transaction, + commitment: Commitment, +): Promise> { + // @ts-ignore + transaction.recentBlockhash = await connection._recentBlockhash( + // @ts-ignore + connection._disableBlockhashCaching, + ); + + const signData = transaction.serializeMessage(); + // @ts-ignore + const wireTransaction = transaction._serialize(signData); + const encodedTransaction = wireTransaction.toString('base64'); + const config: any = { encoding: 'base64', commitment }; + const args = [encodedTransaction, config]; + + // @ts-ignore + const res = await connection._rpcRequest('simulateTransaction', args); + if (res.error) { + throw new Error('failed to simulate transaction: ' + res.error.message); + } + return res.result; +} + +async function awaitTransactionSignatureConfirmation( + txid: TransactionSignature, + timeout: number, + connection: Connection, + commitment: Commitment = 'recent', + queryStatus = false, +): Promise { + let done = false; + let status: SignatureStatus | null | void = { + slot: 0, + confirmations: 0, + err: null, + }; + let subId = 0; + status = await new Promise(async (resolve, reject) => { + setTimeout(() => { + if (done) { + return; + } + done = true; + console.log('Rejecting for timeout...'); + reject({ timeout: true }); + }, timeout); + try { + subId = connection.onSignature( + txid, + (result, context) => { + done = true; + status = { + err: result.err, + slot: context.slot, + confirmations: 0, + }; + if (result.err) { + console.log('Rejected via websocket', result.err); + reject(status); + } else { + console.log('Resolved via websocket', result); + resolve(status); + } + }, + commitment, + ); + } catch (e) { + done = true; + console.error('WS error in setup', txid, e); + } + while (!done && queryStatus) { + // eslint-disable-next-line no-loop-func + (async () => { + try { + const signatureStatuses = await connection.getSignatureStatuses([ + txid, + ]); + status = signatureStatuses && signatureStatuses.value[0]; + if (!done) { + if (!status) { + console.log('REST null result for', txid, status); + } else if (status.err) { + console.log('REST error for', txid, status); + done = true; + reject(status.err); + } else if (!status.confirmations) { + console.log('REST no confirmations for', txid, status); + } else { + console.log('REST confirmation for', txid, status); + done = true; + resolve(status); + } + } + } catch (e) { + if (!done) { + console.log('REST connection error: txid', txid, e); + } + } + })(); + await sleep(2000); + } + }); + + //@ts-ignore + if (connection._signatureSubscriptions[subId]) + connection.removeSignatureListener(subId); + done = true; + console.log('Returning status', status); + return status; +} diff --git a/js/packages/common/src/contexts/index.tsx b/js/packages/common/src/contexts/index.tsx new file mode 100644 index 0000000..e8082d5 --- /dev/null +++ b/js/packages/common/src/contexts/index.tsx @@ -0,0 +1,8 @@ +export * as Accounts from './accounts'; +export * as Connection from './connection'; +export * as Wallet from './wallet'; +export { ParsedAccount, ParsedAccountBase } from './accounts'; + +export * from './accounts'; +export * from './wallet'; +export * from './connection'; diff --git a/js/packages/common/src/contexts/wallet.less b/js/packages/common/src/contexts/wallet.less new file mode 100644 index 0000000..cd08541 --- /dev/null +++ b/js/packages/common/src/contexts/wallet.less @@ -0,0 +1,6 @@ +p { + color: #6d6d6d; + font-family: Inter, sans-serif; + font-style: normal; + font-size: 0.9rem; +} diff --git a/js/packages/common/src/contexts/wallet.tsx b/js/packages/common/src/contexts/wallet.tsx new file mode 100644 index 0000000..1fb76ea --- /dev/null +++ b/js/packages/common/src/contexts/wallet.tsx @@ -0,0 +1,236 @@ +import { WalletAdapter } from "@solana/wallet-base"; + +import Wallet from "@project-serum/sol-wallet-adapter"; +import { Button } from "antd"; +import React, { useCallback, useContext, useEffect, useMemo, useState } from "react"; +import { notify } from "./../utils/notifications"; +import { useConnectionConfig } from "./connection"; +import { useLocalStorageState } from "../utils/utils"; +import { PhantomWalletAdapter } from "../wallet-adapters/phantom"; +import { useLocation } from "react-router"; +import { MetaplexModal } from "../components/MetaplexModal"; + +import './wallet.css' + + +const ASSETS_URL = 'https://raw.githubusercontent.com/solana-labs/oyster/main/assets/wallets/'; +export const WALLET_PROVIDERS = [ + { + name: "Phantom", + url: "https://www.phantom.app", + icon: `https://www.phantom.app/img/logo.png`, + adapter: PhantomWalletAdapter, + }, + { + name: "Sollet", + url: "https://www.sollet.io", + icon: `${ASSETS_URL}sollet.svg`, + }, + { + name: "MathWallet", + url: "https://mathwallet.org", + icon: `${ASSETS_URL}mathwallet.svg`, + }, + // { + // name: 'Torus', + // url: 'https://tor.us', + // icon: `${ASSETS_URL}torus.svg`, + // adapter: TorusWalletAdapter, + // } +]; + +const WalletContext = React.createContext<{ + wallet: WalletAdapter | undefined, + connected: boolean, + select: () => void, + provider: typeof WALLET_PROVIDERS[number] | undefined, +}>({ + wallet: undefined, + connected: false, + select() { }, + provider: undefined, +}); + +export function WalletProvider({ children = null as any }) { + const { endpoint } = useConnectionConfig(); + const location = useLocation(); + const [autoConnect, setAutoConnect] = useState(location.pathname.indexOf('result=') >= 0 || false); + const [providerUrl, setProviderUrl] = useLocalStorageState("walletProvider"); + + const provider = useMemo(() => WALLET_PROVIDERS.find(({ url }) => url === providerUrl), [providerUrl]); + + const wallet = useMemo(function () { + if (provider) { + return new (provider.adapter || Wallet)(providerUrl, endpoint) as WalletAdapter; + } + }, [provider, providerUrl, endpoint]); + + const [connected, setConnected] = useState(false); + + useEffect(() => { + if (wallet?.publicKey && connected) { + const walletPublicKey = wallet.publicKey.toBase58(); + const keyToDisplay = + walletPublicKey.length > 20 + ? `${walletPublicKey.substring(0, 7)}.....${walletPublicKey.substring( + walletPublicKey.length - 7, + walletPublicKey.length + )}` + : walletPublicKey; + notify({ + message: "Wallet update", + description: "Connected to wallet " + keyToDisplay, + }); + } + + }, [connected]) + + useEffect(() => { + if (wallet) { + wallet.on("connect", () => { + if (wallet.publicKey) { + setConnected(true); + } + }); + + wallet.on("disconnect", () => { + setConnected(false); + notify({ + message: "Wallet update", + description: "Disconnected from wallet", + }); + }); + } + + return () => { + setConnected(false); + if (wallet) { + wallet.disconnect(); + } + }; + }, [wallet]); + + useEffect(() => { + if (wallet && autoConnect) { + wallet.connect(); + setAutoConnect(false); + } + + return () => { } + }, [wallet, autoConnect]); + + const [isModalVisible, setIsModalVisible] = useState(false); + const [showProviders, setShowProviders] = useState(false); + + const select = useCallback(() => setIsModalVisible(true), []); + const close = useCallback(() => { + setIsModalVisible(false) + setShowProviders(false) + }, []); + + const pp = WALLET_PROVIDERS.find(wp => wp.name === "Phantom") + + return ( + + {children} + +
M
+ +

{provider ? 'Change provider' : 'Welcome to Metaplex'}

+

{provider ? 'Feel free to switch wallet provider' : 'You must be signed in to place a bid'}

+ +
+ + {(provider || showProviders) ? <> + {WALLET_PROVIDERS.map((provider, idx) => { + if (providerUrl === provider.url) return null + + const onClick = function () { + setProviderUrl(provider.url); + setAutoConnect(true); + close(); + } + return ( + + ) + })} + : <> + +

setShowProviders(true)} style={{ cursor: 'pointer', marginTop: 10 }}> + Select a different Solana wallet +

+ } + +
+
+ ); +} + +export const useWallet = () => { + const { wallet, connected, provider, select } = useContext(WalletContext); + return { + wallet, + connected, + provider, + select, + connect() { + wallet ? wallet.connect() : select(); + }, + disconnect() { + wallet?.disconnect(); + }, + }; +} diff --git a/js/packages/common/src/contracts/token.ts b/js/packages/common/src/contracts/token.ts new file mode 100644 index 0000000..6520e20 --- /dev/null +++ b/js/packages/common/src/contracts/token.ts @@ -0,0 +1,120 @@ +import { + MintLayout, + AccountLayout, + Token, + AuthorityType, +} from '@solana/spl-token'; +import { + Connection, + PublicKey, + Transaction, + Account, + SystemProgram, +} from '@solana/web3.js'; + +export const mintNFT = async ( + connection: Connection, + wallet: { + publicKey: PublicKey; + signTransaction: (tx: Transaction) => Transaction; + }, + // SOL account + owner: PublicKey, +) => { + const TOKEN_PROGRAM_ID = new PublicKey( + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + ); + const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new PublicKey( + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', + ); + const mintAccount = new Account(); + const tokenAccount = new Account(); + + // Allocate memory for the account + const mintRent = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + const accountRent = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + let transaction = new Transaction(); + const signers = [mintAccount, tokenAccount]; + transaction.recentBlockhash = ( + await connection.getRecentBlockhash('max') + ).blockhash; + + transaction.add( + SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: mintAccount.publicKey, + lamports: mintRent, + space: MintLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + transaction.add( + SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: tokenAccount.publicKey, + lamports: accountRent, + space: AccountLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + transaction.add( + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + 0, + wallet.publicKey, + wallet.publicKey, + ), + ); + transaction.add( + Token.createInitAccountInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + tokenAccount.publicKey, + owner, + ), + ); + transaction.add( + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + tokenAccount.publicKey, + wallet.publicKey, + [], + 1, + ), + ); + transaction.add( + Token.createSetAuthorityInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + null, + 'MintTokens', + wallet.publicKey, + [], + ), + ); + + transaction.setSigners(wallet.publicKey, ...signers.map(s => s.publicKey)); + if (signers.length > 0) { + transaction.partialSign(...signers); + } + transaction = await wallet.signTransaction(transaction); + const rawTransaction = transaction.serialize(); + let options = { + skipPreflight: true, + commitment: 'singleGossip', + }; + + const txid = await connection.sendRawTransaction(rawTransaction, options); + + return { txid, mint: mintAccount.publicKey, account: tokenAccount.publicKey }; +}; diff --git a/js/packages/common/src/hooks/index.ts b/js/packages/common/src/hooks/index.ts new file mode 100644 index 0000000..24aa229 --- /dev/null +++ b/js/packages/common/src/hooks/index.ts @@ -0,0 +1,4 @@ +export * from './useUserAccounts'; +export * from './useAccountByMint'; +export * from './useTokenName'; +export * from './useThatState'; diff --git a/js/packages/common/src/hooks/useAccountByMint.ts b/js/packages/common/src/hooks/useAccountByMint.ts new file mode 100644 index 0000000..0271d94 --- /dev/null +++ b/js/packages/common/src/hooks/useAccountByMint.ts @@ -0,0 +1,17 @@ +import { PublicKey } from '@solana/web3.js'; +import { useUserAccounts } from '../hooks/useUserAccounts'; + +export const useAccountByMint = (mint?: string | PublicKey) => { + const { userAccounts } = useUserAccounts(); + const mintAddress = typeof mint === 'string' ? mint : mint?.toBase58(); + + const index = userAccounts.findIndex( + acc => acc.info.mint.toBase58() === mintAddress, + ); + + if (index !== -1) { + return userAccounts[index]; + } + + return; +}; diff --git a/js/packages/common/src/hooks/useThatState.ts b/js/packages/common/src/hooks/useThatState.ts new file mode 100644 index 0000000..86ecf10 --- /dev/null +++ b/js/packages/common/src/hooks/useThatState.ts @@ -0,0 +1,16 @@ +import { useState } from 'react'; + +// Extends useState() hook with async getThatState getter which can be used to get state value in contexts (ex. async callbacks) where up to date state is not available +export function useThatState(initialState: T) { + const [state, setState] = useState(initialState); + const getThatState = () => + new Promise(resolve => { + // Use NOP setState call to retrieve current state value + setState(s => { + resolve(s); + return s; + }); + }); + + return [state, setState, getThatState] as const; +} diff --git a/js/packages/common/src/hooks/useTokenName.ts b/js/packages/common/src/hooks/useTokenName.ts new file mode 100644 index 0000000..b4a6b60 --- /dev/null +++ b/js/packages/common/src/hooks/useTokenName.ts @@ -0,0 +1,10 @@ +import { PublicKey } from '@solana/web3.js'; +import { useConnectionConfig } from '../contexts/connection'; +import { getTokenName } from '../utils/utils'; + +export function useTokenName(mintAddress?: string | PublicKey) { + const { tokenMap } = useConnectionConfig(); + const address = + typeof mintAddress === 'string' ? mintAddress : mintAddress?.toBase58(); + return getTokenName(tokenMap, address); +} diff --git a/js/packages/common/src/hooks/useUserAccounts.ts b/js/packages/common/src/hooks/useUserAccounts.ts new file mode 100644 index 0000000..43bacbf --- /dev/null +++ b/js/packages/common/src/hooks/useUserAccounts.ts @@ -0,0 +1,21 @@ +import { TokenAccount } from '../models'; +import { useAccountsContext } from '../contexts/accounts'; + +export function useUserAccounts(): { + userAccounts: TokenAccount[]; + accountByMint: Map; +} { + const context = useAccountsContext(); + + const accountByMint = context.userAccounts.reduce( + (prev: Map, acc: TokenAccount) => { + prev.set(acc.info.mint.toBase58(), acc); + return prev; + }, + new Map(), + ); + return { + userAccounts: context.userAccounts as TokenAccount[], + accountByMint, + }; +} diff --git a/js/packages/common/src/index.tsx b/js/packages/common/src/index.tsx new file mode 100644 index 0000000..d0985ce --- /dev/null +++ b/js/packages/common/src/index.tsx @@ -0,0 +1,17 @@ +export * as actions from './actions'; +export * from './actions'; +export * as components from './components'; +export * from './components'; // Allow direct exports too +export * as constants from './constants'; +export * as hooks from './hooks'; +export * from './hooks'; +export * as contexts from './contexts'; +export * from './contexts'; +export * as models from './models'; +export * as utils from './utils'; +export * from './utils'; +export * as walletAdapters from './wallet-adapters'; + +export { TokenAccount } from './models'; +export { ParsedAccount, ParsedAccountBase } from './contexts'; +export { KnownTokenMap, EventEmitter, Layout } from './utils'; diff --git a/js/packages/common/src/models/account.ts b/js/packages/common/src/models/account.ts new file mode 100644 index 0000000..7825e92 --- /dev/null +++ b/js/packages/common/src/models/account.ts @@ -0,0 +1,85 @@ +import { + AccountInfo, + Keypair, + PublicKey, + TransactionInstruction, +} from '@solana/web3.js'; + +import { AccountInfo as TokenAccountInfo, Token } from '@solana/spl-token'; +import { TOKEN_PROGRAM_ID } from '../utils/ids'; +import BufferLayout from 'buffer-layout'; + +export interface TokenAccount { + pubkey: PublicKey; + account: AccountInfo; + info: TokenAccountInfo; +} + +export interface ParsedDataAccount { + amount: number; + rawAmount: string; + parsedAssetAddress: string; + parsedAccount: any; + assetDecimals: number; + assetIcon: any; + name: string; + symbol: string; + sourceAddress: string; + targetAddress: string; +} + +export const ParsedDataLayout = BufferLayout.struct([ + BufferLayout.blob(32, 'amount'), + BufferLayout.u8('toChain'), + BufferLayout.blob(32, 'sourceAddress'), + BufferLayout.blob(32, 'targetAddress'), + BufferLayout.blob(32, 'assetAddress'), + BufferLayout.u8('assetChain'), + BufferLayout.u8('assetDecimals'), + BufferLayout.seq(BufferLayout.u8(), 1), // 4 byte alignment because a u32 is following + BufferLayout.u32('nonce'), + BufferLayout.blob(1001, 'vaa'), + BufferLayout.seq(BufferLayout.u8(), 3), // 4 byte alignment because a u32 is following + BufferLayout.u32('vaaTime'), + BufferLayout.u32('lockupTime'), + BufferLayout.u8('pokeCounter'), + BufferLayout.blob(32, 'signatureAccount'), + BufferLayout.u8('initialized'), +]); + +export function approve( + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + account: PublicKey, + owner: PublicKey, + amount: number, + autoRevoke = true, + + // if delegate is not passed ephemeral transfer authority is used + delegate?: PublicKey, + existingTransferAuthority?: Keypair, +): Keypair { + const tokenProgram = TOKEN_PROGRAM_ID; + + const transferAuthority = existingTransferAuthority || Keypair.generate(); + const delegateKey = delegate ?? transferAuthority.publicKey; + + instructions.push( + Token.createApproveInstruction( + tokenProgram, + account, + delegate ?? transferAuthority.publicKey, + owner, + [], + amount, + ), + ); + + if (autoRevoke) { + cleanupInstructions.push( + Token.createRevokeInstruction(tokenProgram, account, owner, []), + ); + } + + return transferAuthority; +} diff --git a/js/packages/common/src/models/index.ts b/js/packages/common/src/models/index.ts new file mode 100644 index 0000000..b1673cd --- /dev/null +++ b/js/packages/common/src/models/index.ts @@ -0,0 +1,2 @@ +export * from './account'; +export * from './tokenSwap'; diff --git a/js/packages/common/src/models/tokenSwap.ts b/js/packages/common/src/models/tokenSwap.ts new file mode 100644 index 0000000..4702e2d --- /dev/null +++ b/js/packages/common/src/models/tokenSwap.ts @@ -0,0 +1,82 @@ +import * as BufferLayout from 'buffer-layout'; +import { publicKey, uint64 } from '../utils/layout'; + +export { TokenSwap } from '@solana/spl-token-swap'; + +const FEE_LAYOUT = BufferLayout.struct( + [ + BufferLayout.nu64('tradeFeeNumerator'), + BufferLayout.nu64('tradeFeeDenominator'), + BufferLayout.nu64('ownerTradeFeeNumerator'), + BufferLayout.nu64('ownerTradeFeeDenominator'), + BufferLayout.nu64('ownerWithdrawFeeNumerator'), + BufferLayout.nu64('ownerWithdrawFeeDenominator'), + BufferLayout.nu64('hostFeeNumerator'), + BufferLayout.nu64('hostFeeDenominator'), + ], + 'fees', +); + +export const TokenSwapLayoutLegacyV0 = BufferLayout.struct([ + BufferLayout.u8('isInitialized'), + BufferLayout.u8('nonce'), + publicKey('tokenAccountA'), + publicKey('tokenAccountB'), + publicKey('tokenPool'), + uint64('feesNumerator'), + uint64('feesDenominator'), +]); + +export const TokenSwapLayoutV1: typeof BufferLayout.Structure = + BufferLayout.struct([ + BufferLayout.u8('isInitialized'), + BufferLayout.u8('nonce'), + publicKey('tokenProgramId'), + publicKey('tokenAccountA'), + publicKey('tokenAccountB'), + publicKey('tokenPool'), + publicKey('mintA'), + publicKey('mintB'), + publicKey('feeAccount'), + BufferLayout.u8('curveType'), + uint64('tradeFeeNumerator'), + uint64('tradeFeeDenominator'), + uint64('ownerTradeFeeNumerator'), + uint64('ownerTradeFeeDenominator'), + uint64('ownerWithdrawFeeNumerator'), + uint64('ownerWithdrawFeeDenominator'), + BufferLayout.blob(16, 'padding'), + ]); + +const CURVE_NODE = BufferLayout.union( + BufferLayout.u8(), + BufferLayout.blob(32), + 'curve', +); +CURVE_NODE.addVariant(0, BufferLayout.struct([]), 'constantProduct'); +CURVE_NODE.addVariant( + 1, + BufferLayout.struct([BufferLayout.nu64('token_b_price')]), + 'constantPrice', +); +CURVE_NODE.addVariant(2, BufferLayout.struct([]), 'stable'); +CURVE_NODE.addVariant( + 3, + BufferLayout.struct([BufferLayout.nu64('token_b_offset')]), + 'offset', +); + +export const TokenSwapLayout: typeof BufferLayout.Structure = + BufferLayout.struct([ + BufferLayout.u8('isInitialized'), + BufferLayout.u8('nonce'), + publicKey('tokenProgramId'), + publicKey('tokenAccountA'), + publicKey('tokenAccountB'), + publicKey('tokenPool'), + publicKey('mintA'), + publicKey('mintB'), + publicKey('feeAccount'), + FEE_LAYOUT, + CURVE_NODE, + ]); diff --git a/js/packages/common/src/types/buffer-layout.d.ts b/js/packages/common/src/types/buffer-layout.d.ts new file mode 100644 index 0000000..32e44d0 --- /dev/null +++ b/js/packages/common/src/types/buffer-layout.d.ts @@ -0,0 +1,9 @@ +declare module 'buffer-layout' { + const bl: any; + export = bl; +} + +declare module 'jazzicon' { + const jazzicon: any; + export = jazzicon; +} diff --git a/js/packages/common/src/types/sol-wallet-adapter.d.ts b/js/packages/common/src/types/sol-wallet-adapter.d.ts new file mode 100644 index 0000000..41acf5d --- /dev/null +++ b/js/packages/common/src/types/sol-wallet-adapter.d.ts @@ -0,0 +1,4 @@ +declare module '@project-serum/sol-wallet-adapter' { + const adapter: any; + export = adapter; +} diff --git a/js/packages/common/src/types/u64.d.ts b/js/packages/common/src/types/u64.d.ts new file mode 100644 index 0000000..6c349cf --- /dev/null +++ b/js/packages/common/src/types/u64.d.ts @@ -0,0 +1,6 @@ +import BN from 'bn.js'; + +export class u64 extends BN { + toBuffer(): Buffer; + static fromBuffer(buffer: Buffer): u64; +} diff --git a/js/packages/common/src/utils/borsh.ts b/js/packages/common/src/utils/borsh.ts new file mode 100644 index 0000000..d3d4ed6 --- /dev/null +++ b/js/packages/common/src/utils/borsh.ts @@ -0,0 +1,17 @@ +import { PublicKey } from '@solana/web3.js'; +import { BinaryReader, BinaryWriter } from 'borsh'; + +export const extendBorsh = () => { + (BinaryReader.prototype as any).readPubkey = function () { + const reader = this as unknown as BinaryReader; + const array = reader.readFixedArray(32); + return new PublicKey(array); + }; + + (BinaryWriter.prototype as any).writePubkey = function (value: PublicKey) { + const writer = this as unknown as BinaryWriter; + writer.writeFixedArray(value.toBuffer()); + }; +}; + +extendBorsh(); diff --git a/js/packages/common/src/utils/eventEmitter.ts b/js/packages/common/src/utils/eventEmitter.ts new file mode 100644 index 0000000..ee31a71 --- /dev/null +++ b/js/packages/common/src/utils/eventEmitter.ts @@ -0,0 +1,60 @@ +import { EventEmitter as Emitter } from 'eventemitter3'; + +export class CacheUpdateEvent { + static type = 'CacheUpdate'; + id: string; + parser: any; + isNew: boolean; + constructor(id: string, isNew: boolean, parser: any) { + this.id = id; + this.parser = parser; + this.isNew = isNew; + } +} + +export class CacheDeleteEvent { + static type = 'CacheUpdate'; + id: string; + constructor(id: string) { + this.id = id; + } +} + +export class MarketUpdateEvent { + static type = 'MarketUpdate'; + ids: Set; + constructor(ids: Set) { + this.ids = ids; + } +} + +export class EventEmitter { + private emitter = new Emitter(); + + onMarket(callback: (args: MarketUpdateEvent) => void) { + this.emitter.on(MarketUpdateEvent.type, callback); + + return () => this.emitter.removeListener(MarketUpdateEvent.type, callback); + } + + onCache(callback: (args: CacheUpdateEvent) => void) { + this.emitter.on(CacheUpdateEvent.type, callback); + + return () => this.emitter.removeListener(CacheUpdateEvent.type, callback); + } + + raiseMarketUpdated(ids: Set) { + this.emitter.emit(MarketUpdateEvent.type, new MarketUpdateEvent(ids)); + } + + raiseCacheUpdated(id: string, isNew: boolean, parser: any) { + this.emitter.emit( + CacheUpdateEvent.type, + new CacheUpdateEvent(id, isNew, parser), + ); + } + + raiseCacheDeleted(id: string) { + this.emitter.emit(CacheDeleteEvent.type, new CacheDeleteEvent(id)); + } +} diff --git a/js/packages/common/src/utils/ids.ts b/js/packages/common/src/utils/ids.ts new file mode 100644 index 0000000..7aa3dfa --- /dev/null +++ b/js/packages/common/src/utils/ids.ts @@ -0,0 +1,192 @@ +import { PublicKey } from '@solana/web3.js'; +import { TokenSwapLayout, TokenSwapLayoutV1 } from '../models/tokenSwap'; + +export const STORE = new PublicKey( + '3Eu2LaWpSGcJYiMEFaUw5DvD2uuzxuRmSp9sUZLhLTAF', +); + +export const WRAPPED_SOL_MINT = new PublicKey( + 'So11111111111111111111111111111111111111112', +); +export let TOKEN_PROGRAM_ID = new PublicKey( + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', +); + +export let LENDING_PROGRAM_ID = new PublicKey( + 'LendZqTs7gn5CTSJU1jWKhKuVpjJGom45nnwPb2AMTi', +); + +export let SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new PublicKey( + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', +); +export let BPF_UPGRADE_LOADER_ID = new PublicKey( + 'BPFLoaderUpgradeab1e11111111111111111111111', +); + +export const METADATA_PROGRAM_ID = new PublicKey( + 'metaeyJokjzVwvcuDFX3rWAKvPYgGGqbGxXbcufPhBY', +); + +export const MEMO_ID = new PublicKey( + 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr', +); + +export const VAULT_ID = new PublicKey( + 'vau1pEhWRVvv148kMr4yaGG3x6ATgjqsk3MyPG33vsR', +); + +export const AUCTION_ID = new PublicKey( + 'auctZEoymtKdckLLiq3pz5BmdWsXu4Aq3aLKgtT6zAt', +); + +export const METAPLEX_ID = new PublicKey( + 'p1exrXi4GNg282QUXAEznqpxRd2DUSHewz586MzHP8K', +); + +export let SYSTEM = new PublicKey('11111111111111111111111111111111'); + +let WORMHOLE_BRIDGE: { + pubkey: PublicKey; + bridge: string; + wrappedMaster: string; +}; + +let GOVERNANCE: { + programId: PublicKey; +}; + +let SWAP_PROGRAM_ID: PublicKey; +let SWAP_PROGRAM_LEGACY_IDS: PublicKey[]; +let SWAP_PROGRAM_LAYOUT: any; + +export const LEND_HOST_FEE_ADDRESS = process.env.REACT_APP_LEND_HOST_FEE_ADDRESS + ? new PublicKey(`${process.env.REACT_APP_LEND_HOST_FEE_ADDRESS}`) + : undefined; + +console.debug(`Lend host fee address: ${LEND_HOST_FEE_ADDRESS?.toBase58()}`); + +export const ENABLE_FEES_INPUT = false; + +// legacy pools are used to show users contributions in those pools to allow for withdrawals of funds +export const PROGRAM_IDS = [ + { + name: 'mainnet-beta', + governance: () => ({ + programId: new PublicKey('9iAeqqppjn7g1Jn8o2cQCqU5aQVV3h4q9bbWdKRbeC2w'), + }), + wormhole: () => ({ + pubkey: new PublicKey('WormT3McKhFJ2RkiGpdw9GKvNCrB2aB54gb2uV9MfQC'), + bridge: '0xf92cD566Ea4864356C5491c177A430C222d7e678', + wrappedMaster: '9A5e27995309a03f8B583feBdE7eF289FcCdC6Ae', + }), + swap: () => ({ + current: { + pubkey: new PublicKey('9qvG1zUp8xF1Bi4m6UdRNby1BAAuaDrUxSpv4CmRRMjL'), + layout: TokenSwapLayoutV1, + }, + legacy: [ + // TODO: uncomment to enable legacy contract + // new PublicKey("9qvG1zUp8xF1Bi4m6UdRNby1BAAuaDrUxSpv4CmRRMjL"), + ], + }), + }, + { + name: 'testnet', + governance: () => ({ + programId: new PublicKey('A9KW1nhwZUr1kMX8C6rgzZvAE9AwEEUi2C77SiVvEiuN'), + }), + wormhole: () => ({ + pubkey: new PublicKey('5gQf5AUhAgWYgUCt9ouShm9H7dzzXUsLdssYwe5krKhg'), + bridge: '0x251bBCD91E84098509beaeAfF0B9951859af66D3', + wrappedMaster: 'E39f0b145C0aF079B214c5a8840B2B01eA14794c', + }), + swap: () => ({ + current: { + pubkey: new PublicKey('2n2dsFSgmPcZ8jkmBZLGUM2nzuFqcBGQ3JEEj6RJJcEg'), + layout: TokenSwapLayoutV1, + }, + legacy: [], + }), + }, + + { + name: 'devnet', + governance: () => ({ + programId: new PublicKey('A9KW1nhwZUr1kMX8C6rgzZvAE9AwEEUi2C77SiVvEiuN'), + }), + wormhole: () => ({ + pubkey: new PublicKey('WormT3McKhFJ2RkiGpdw9GKvNCrB2aB54gb2uV9MfQC'), + bridge: '0xf92cD566Ea4864356C5491c177A430C222d7e678', + wrappedMaster: '9A5e27995309a03f8B583feBdE7eF289FcCdC6Ae', + }), + swap: () => ({ + current: { + pubkey: new PublicKey('6Cust2JhvweKLh4CVo1dt21s2PJ86uNGkziudpkNPaCj'), + layout: TokenSwapLayout, + }, + legacy: [new PublicKey('BSfTAcBdqmvX5iE2PW88WFNNp2DHhLUaBKk5WrnxVkcJ')], + }), + }, + { + name: 'localnet', + governance: () => ({ + programId: new PublicKey('2uWrXQ3tMurqTLe3Dmue6DzasUGV9UPqK7AK7HzS7v3D'), + }), + wormhole: () => ({ + pubkey: new PublicKey('WormT3McKhFJ2RkiGpdw9GKvNCrB2aB54gb2uV9MfQC'), + bridge: '0xf92cD566Ea4864356C5491c177A430C222d7e678', + wrappedMaster: '9A5e27995309a03f8B583feBdE7eF289FcCdC6Ae', + }), + swap: () => ({ + current: { + pubkey: new PublicKey('369YmCWHGxznT7GGBhcLZDRcRoGWmGKFWdmtiPy78yj7'), + layout: TokenSwapLayoutV1, + }, + legacy: [], + }), + }, +]; + +export const setProgramIds = (envName: string) => { + let instance = PROGRAM_IDS.find(env => envName.indexOf(env.name) >= 0); + if (!instance) { + return; + } + + WORMHOLE_BRIDGE = instance.wormhole(); + + let swap = instance.swap(); + + SWAP_PROGRAM_ID = swap.current.pubkey; + SWAP_PROGRAM_LAYOUT = swap.current.layout; + SWAP_PROGRAM_LEGACY_IDS = swap.legacy; + + GOVERNANCE = instance.governance(); + + if (envName === 'mainnet-beta') { + LENDING_PROGRAM_ID = new PublicKey( + 'LendZqTs7gn5CTSJU1jWKhKuVpjJGom45nnwPb2AMTi', + ); + } +}; + +export const programIds = () => { + return { + token: TOKEN_PROGRAM_ID, + swap: SWAP_PROGRAM_ID, + swap_legacy: SWAP_PROGRAM_LEGACY_IDS, + swapLayout: SWAP_PROGRAM_LAYOUT, + lending: LENDING_PROGRAM_ID, + wormhole: WORMHOLE_BRIDGE, + governance: GOVERNANCE, + associatedToken: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + bpf_upgrade_loader: BPF_UPGRADE_LOADER_ID, + system: SYSTEM, + metadata: METADATA_PROGRAM_ID, + memo: MEMO_ID, + vault: VAULT_ID, + auction: AUCTION_ID, + metaplex: METAPLEX_ID, + store: STORE, + }; +}; diff --git a/js/packages/common/src/utils/index.tsx b/js/packages/common/src/utils/index.tsx new file mode 100644 index 0000000..dbe5b1e --- /dev/null +++ b/js/packages/common/src/utils/index.tsx @@ -0,0 +1,8 @@ +export * from './eventEmitter'; +export * from './ids'; +export * as Layout from './layout'; +export * from './notifications'; +export * from './utils'; +export * from './strings'; +export * as shortvec from './shortvec'; +export * from './borsh'; diff --git a/js/packages/common/src/utils/layout.ts b/js/packages/common/src/utils/layout.ts new file mode 100644 index 0000000..38931a4 --- /dev/null +++ b/js/packages/common/src/utils/layout.ts @@ -0,0 +1,121 @@ +import { PublicKey } from '@solana/web3.js'; +import BN from 'bn.js'; +import * as BufferLayout from 'buffer-layout'; + +/** + * Layout for a public key + */ +export const publicKey = (property = 'publicKey'): unknown => { + const publicKeyLayout = BufferLayout.blob(32, property); + + const _decode = publicKeyLayout.decode.bind(publicKeyLayout); + const _encode = publicKeyLayout.encode.bind(publicKeyLayout); + + publicKeyLayout.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return new PublicKey(data); + }; + + publicKeyLayout.encode = (key: PublicKey, buffer: Buffer, offset: number) => { + return _encode(key.toBuffer(), buffer, offset); + }; + + return publicKeyLayout; +}; + +/** + * Layout for a 64bit unsigned value + */ +export const uint64 = (property = 'uint64'): unknown => { + const layout = BufferLayout.blob(8, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return new BN( + [...data] + .reverse() + .map(i => `00${i.toString(16)}`.slice(-2)) + .join(''), + 16, + ); + }; + + layout.encode = (num: BN, buffer: Buffer, offset: number) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 8) { + const zeroPad = Buffer.alloc(8); + b.copy(zeroPad); + b = zeroPad; + } + return _encode(b, buffer, offset); + }; + + return layout; +}; + +// TODO: wrap in BN (what about decimals?) +export const uint128 = (property = 'uint128'): unknown => { + const layout = BufferLayout.blob(16, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return new BN( + [...data] + .reverse() + .map(i => `00${i.toString(16)}`.slice(-2)) + .join(''), + 16, + ); + }; + + layout.encode = (num: BN, buffer: Buffer, offset: number) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 16) { + const zeroPad = Buffer.alloc(16); + b.copy(zeroPad); + b = zeroPad; + } + + return _encode(b, buffer, offset); + }; + + return layout; +}; + +/** + * Layout for a Rust String type + */ +export const rustString = (property = 'string'): unknown => { + const rsl = BufferLayout.struct( + [ + BufferLayout.u32('length'), + BufferLayout.u32('lengthPadding'), + BufferLayout.blob(BufferLayout.offset(BufferLayout.u32(), -8), 'chars'), + ], + property, + ); + const _decode = rsl.decode.bind(rsl); + const _encode = rsl.encode.bind(rsl); + + rsl.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return data.chars.toString('utf8'); + }; + + rsl.encode = (str: string, buffer: Buffer, offset: number) => { + const data = { + chars: Buffer.from(str, 'utf8'), + }; + return _encode(data, buffer, offset); + }; + + return rsl; +}; diff --git a/js/packages/common/src/utils/notifications.tsx b/js/packages/common/src/utils/notifications.tsx new file mode 100644 index 0000000..ae1dc15 --- /dev/null +++ b/js/packages/common/src/utils/notifications.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import { notification } from "antd"; +// import Link from '../components/Link'; + +export function notify({ + message = "", + description = undefined as any, + txid = "", + type = "info", + placement = "bottomLeft", +}) { + if (txid) { + // + // View transaction {txid.slice(0, 8)}...{txid.slice(txid.length - 8)} + // + + description = <>; + } + (notification as any)[type]({ + message: {message}, + description: ( + {description} + ), + placement, + style: { + backgroundColor: "white", + }, + }); +} diff --git a/js/packages/common/src/utils/shortvec.ts b/js/packages/common/src/utils/shortvec.ts new file mode 100644 index 0000000..0acc0fc --- /dev/null +++ b/js/packages/common/src/utils/shortvec.ts @@ -0,0 +1,30 @@ +export function decodeLength(bytes: Array): number { + let len = 0; + let size = 0; + for (;;) { + let elem = bytes.shift(); + //@ts-ignore + len |= (elem & 0x7f) << (size * 7); + size += 1; + //@ts-ignore + if ((elem & 0x80) === 0) { + break; + } + } + return len; +} + +export function encodeLength(bytes: Array, len: number) { + let rem_len = len; + for (;;) { + let elem = rem_len & 0x7f; + rem_len >>= 7; + if (rem_len === 0) { + bytes.push(elem); + break; + } else { + elem |= 0x80; + bytes.push(elem); + } + } +} diff --git a/js/packages/common/src/utils/strings.ts b/js/packages/common/src/utils/strings.ts new file mode 100644 index 0000000..28a7356 --- /dev/null +++ b/js/packages/common/src/utils/strings.ts @@ -0,0 +1,74 @@ +// credit https://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +export function toUTF8Array(str: string) { + let utf8 = []; + for (let i = 0; i < str.length; i++) { + let charcode = str.charCodeAt(i); + if (charcode < 0x80) utf8.push(charcode); + else if (charcode < 0x800) { + utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f)); + } else if (charcode < 0xd800 || charcode >= 0xe000) { + utf8.push( + 0xe0 | (charcode >> 12), + 0x80 | ((charcode >> 6) & 0x3f), + 0x80 | (charcode & 0x3f), + ); + } + // surrogate pair + else { + i++; + // UTF-16 encodes 0x10000-0x10FFFF by + // subtracting 0x10000 and splitting the + // 20 bits of 0x0-0xFFFFF into two halves + charcode = + 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff)); + utf8.push( + 0xf0 | (charcode >> 18), + 0x80 | ((charcode >> 12) & 0x3f), + 0x80 | ((charcode >> 6) & 0x3f), + 0x80 | (charcode & 0x3f), + ); + } + } + return utf8; +} + +//courtesy https://gist.github.com/joni/3760795 +export function fromUTF8Array(data: number[]) { + // array of bytes + let str = '', + i; + + for (i = 0; i < data.length; i++) { + const value = data[i]; + + if (value < 0x80) { + str += String.fromCharCode(value); + } else if (value > 0xbf && value < 0xe0) { + str += String.fromCharCode(((value & 0x1f) << 6) | (data[i + 1] & 0x3f)); + i += 1; + } else if (value > 0xdf && value < 0xf0) { + str += String.fromCharCode( + ((value & 0x0f) << 12) | + ((data[i + 1] & 0x3f) << 6) | + (data[i + 2] & 0x3f), + ); + i += 2; + } else { + // surrogate pair + const charCode = + (((value & 0x07) << 18) | + ((data[i + 1] & 0x3f) << 12) | + ((data[i + 2] & 0x3f) << 6) | + (data[i + 3] & 0x3f)) - + 0x010000; + + str += String.fromCharCode( + (charCode >> 10) | 0xd800, + (charCode & 0x03ff) | 0xdc00, + ); + i += 3; + } + } + + return str; +} diff --git a/js/packages/common/src/utils/utils.ts b/js/packages/common/src/utils/utils.ts new file mode 100644 index 0000000..cf3bf85 --- /dev/null +++ b/js/packages/common/src/utils/utils.ts @@ -0,0 +1,261 @@ +import { useCallback, useState } from 'react'; +import { MintInfo } from '@solana/spl-token'; + +import { TokenAccount } from './../models'; +import { PublicKey } from '@solana/web3.js'; +import BN from 'bn.js'; +import { WAD, ZERO } from '../constants'; +import { TokenInfo } from '@solana/spl-token-registry'; + +export type KnownTokenMap = Map; + +export const formatPriceNumber = new Intl.NumberFormat('en-US', { + style: 'decimal', + minimumFractionDigits: 2, + maximumFractionDigits: 8, +}); + +export function useLocalStorageState(key: string, defaultState?: string) { + const [state, setState] = useState(() => { + // NOTE: Not sure if this is ok + const storedState = localStorage.getItem(key); + if (storedState) { + return JSON.parse(storedState); + } + return defaultState; + }); + + const setLocalStorageState = useCallback( + newState => { + const changed = state !== newState; + if (!changed) { + return; + } + setState(newState); + if (newState === null) { + localStorage.removeItem(key); + } else { + localStorage.setItem(key, JSON.stringify(newState)); + } + }, + [state, key], + ); + + return [state, setLocalStorageState]; +} + +// shorten the checksummed version of the input address to have 4 characters at start and end +export function shortenAddress(address: string, chars = 4): string { + return `${address.slice(0, chars)}...${address.slice(-chars)}`; +} + +export function getTokenName( + map: KnownTokenMap, + mint?: string | PublicKey, + shorten = true, +): string { + const mintAddress = typeof mint === 'string' ? mint : mint?.toBase58(); + + if (!mintAddress) { + return 'N/A'; + } + + const knownSymbol = map.get(mintAddress)?.symbol; + if (knownSymbol) { + return knownSymbol; + } + + return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress; +} +export function getVerboseTokenName( + map: KnownTokenMap, + mint?: string | PublicKey, + shorten = true, +): string { + const mintAddress = typeof mint === 'string' ? mint : mint?.toBase58(); + + if (!mintAddress) { + return 'N/A'; + } + + const knownName = map.get(mintAddress)?.name; + if (knownName) { + return knownName; + } + + return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress; +} + +export function getTokenByName(tokenMap: KnownTokenMap, name: string) { + let token: TokenInfo | null = null; + for (const val of tokenMap.values()) { + if (val.symbol === name) { + token = val; + break; + } + } + return token; +} + +export function getTokenIcon( + map: KnownTokenMap, + mintAddress?: string | PublicKey, +): string | undefined { + const address = + typeof mintAddress === 'string' ? mintAddress : mintAddress?.toBase58(); + if (!address) { + return; + } + + return map.get(address)?.logoURI; +} + +export function isKnownMint(map: KnownTokenMap, mintAddress: string) { + return !!map.get(mintAddress); +} + +export const STABLE_COINS = new Set(['USDC', 'wUSDC', 'USDT']); + +export function chunks(array: T[], size: number): T[][] { + return Array.apply( + 0, + new Array(Math.ceil(array.length / size)), + ).map((_, index) => array.slice(index * size, (index + 1) * size)); +} + +export function toLamports( + account?: TokenAccount | number, + mint?: MintInfo, +): number { + if (!account) { + return 0; + } + + const amount = + typeof account === 'number' ? account : account.info.amount?.toNumber(); + + const precision = Math.pow(10, mint?.decimals || 0); + return Math.floor(amount * precision); +} + +export function wadToLamports(amount?: BN): BN { + return amount?.div(WAD) || ZERO; +} + +export function fromLamports( + account?: TokenAccount | number | BN, + mint?: MintInfo, + rate: number = 1.0, +): number { + if (!account) { + return 0; + } + + const amount = Math.floor( + typeof account === 'number' + ? account + : BN.isBN(account) + ? account.toNumber() + : account.info.amount.toNumber(), + ); + + const precision = Math.pow(10, mint?.decimals || 9); + return (amount / precision) * rate; +} + +export const tryParseKey = (key: string): PublicKey | null => { + try { + return new PublicKey(key); + } catch (error) { + return null; + } +}; + +var SI_SYMBOL = ['', 'k', 'M', 'G', 'T', 'P', 'E']; + +const abbreviateNumber = (number: number, precision: number) => { + let tier = (Math.log10(number) / 3) | 0; + let scaled = number; + let suffix = SI_SYMBOL[tier]; + if (tier !== 0) { + let scale = Math.pow(10, tier * 3); + scaled = number / scale; + } + + return scaled.toFixed(precision) + suffix; +}; + +export const formatAmount = ( + val: number, + precision: number = 6, + abbr: boolean = true, +) => (abbr ? abbreviateNumber(val, precision) : val.toFixed(precision)); + +export function formatTokenAmount( + account?: TokenAccount | number | BN, + mint?: MintInfo, + rate: number = 1.0, + prefix = '', + suffix = '', + precision = 6, + abbr = false, +): string { + if (!account) { + return ''; + } + + return `${[prefix]}${formatAmount( + fromLamports(account, mint, rate), + precision, + abbr, + )}${suffix}`; +} + +export const formatUSD = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', +}); + +const numberFormater = new Intl.NumberFormat('en-US', { + style: 'decimal', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); + +export const formatNumber = { + format: (val?: number) => { + if (!val) { + return '--'; + } + + return numberFormater.format(val); + }, +}; + +export const formatPct = new Intl.NumberFormat('en-US', { + style: 'percent', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); + +export function convert( + account?: TokenAccount | number, + mint?: MintInfo, + rate: number = 1.0, +): number { + if (!account) { + return 0; + } + + const amount = + typeof account === 'number' ? account : account.info.amount?.toNumber(); + + const precision = Math.pow(10, mint?.decimals || 0); + let result = (amount / precision) * rate; + + return result; +} + +export function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/js/packages/common/src/wallet-adapters/index.tsx b/js/packages/common/src/wallet-adapters/index.tsx new file mode 100644 index 0000000..73ba6ec --- /dev/null +++ b/js/packages/common/src/wallet-adapters/index.tsx @@ -0,0 +1 @@ +export * as solong_adapter from './solong_adapter'; diff --git a/js/packages/common/src/wallet-adapters/phantom/index.tsx b/js/packages/common/src/wallet-adapters/phantom/index.tsx new file mode 100644 index 0000000..6618192 --- /dev/null +++ b/js/packages/common/src/wallet-adapters/phantom/index.tsx @@ -0,0 +1,108 @@ +import EventEmitter from 'eventemitter3'; +import { PublicKey, Transaction } from '@solana/web3.js'; +import { notify } from '../../utils/notifications'; +import { WalletAdapter } from '@solana/wallet-base'; + +type PhantomEvent = 'disconnect' | 'connect'; +type PhantomRequestMethod = + | 'connect' + | 'disconnect' + | 'signTransaction' + | 'signAllTransactions'; + +interface PhantomProvider { + publicKey?: PublicKey; + isConnected?: boolean; + autoApprove?: boolean; + signTransaction: (transaction: Transaction) => Promise; + signAllTransactions: (transactions: Transaction[]) => Promise; + connect: () => Promise; + disconnect: () => Promise; + on: (event: PhantomEvent, handler: (args: any) => void) => void; + request: (method: PhantomRequestMethod, params: any) => Promise; +} + +export class PhantomWalletAdapter + extends EventEmitter + implements WalletAdapter { + _provider: PhantomProvider | undefined; + _cachedCorrectKey?: PublicKey; + constructor() { + super(); + this.connect = this.connect.bind(this); + } + + get connected() { + return this._provider?.isConnected || false; + } + + get autoApprove() { + return this._provider?.autoApprove || false; + } + + async signAllTransactions( + transactions: Transaction[], + ): Promise { + if (!this._provider) { + return transactions; + } + + return this._provider.signAllTransactions(transactions); + } + + get publicKey() { + // Due to weird phantom bug where their public key isnt quite like ours + if (!this._cachedCorrectKey && this._provider?.publicKey) + this._cachedCorrectKey = new PublicKey( + this._provider.publicKey.toBase58(), + ); + + return this._cachedCorrectKey || null; + } + + async signTransaction(transaction: Transaction) { + if (!this._provider) { + return transaction; + } + + return this._provider.signTransaction(transaction); + } + + connect = async () => { + if (this._provider) { + return; + } + + let provider: PhantomProvider; + if ((window as any)?.solana?.isPhantom) { + provider = (window as any).solana; + } else { + window.open('https://phantom.app/', '_blank'); + notify({ + message: 'Phantom Error', + description: 'Please install Phantom wallet from Chrome ', + }); + return; + } + + provider.on('connect', () => { + this._provider = provider; + this.emit('connect'); + }); + + if (!provider.isConnected) { + await provider.connect(); + } + + this._provider = provider; + this.emit('connect'); + }; + + disconnect() { + if (this._provider) { + this._provider.disconnect(); + this._provider = undefined; + this.emit('disconnect'); + } + } +} diff --git a/js/packages/common/src/wallet-adapters/solong/index.tsx b/js/packages/common/src/wallet-adapters/solong/index.tsx new file mode 100644 index 0000000..4f2bcc6 --- /dev/null +++ b/js/packages/common/src/wallet-adapters/solong/index.tsx @@ -0,0 +1,62 @@ +import EventEmitter from "eventemitter3"; +import {PublicKey, Transaction} from "@solana/web3.js"; +import { WalletAdapter } from "@solana/wallet-base"; +import { notify } from "../../utils/notifications"; + +export class SolongWalletAdapter extends EventEmitter implements WalletAdapter { + _publicKey: PublicKey | null; + _onProcess: boolean; + constructor() { + super(); + this._publicKey = null; + this._onProcess = false; + this.connect = this.connect.bind(this); + } + + get publicKey() { + return this._publicKey; + } + + async signTransaction(transaction: Transaction) { + return (window as any).solong.signTransaction(transaction); + } + + async signAllTransactions(transactions: Transaction[]) { + return transactions; + } + + connect() { + if (this._onProcess) { + return; + } + + if ((window as any).solong === undefined) { + notify({ + message: "Solong Error", + description: "Please install solong wallet from Chrome ", + }); + return; + } + + this._onProcess = true; + (window as any).solong + .selectAccount() + .then((account: any) => { + this._publicKey = new PublicKey(account); + this.emit("connect", this._publicKey); + }) + .catch(() => { + this.disconnect(); + }) + .finally(() => { + this._onProcess = false; + }); + } + + disconnect() { + if (this._publicKey) { + this._publicKey = null; + this.emit("disconnect"); + } + } +} diff --git a/js/packages/common/src/wallet-adapters/solong_adapter.tsx b/js/packages/common/src/wallet-adapters/solong_adapter.tsx new file mode 100644 index 0000000..aef7dd6 --- /dev/null +++ b/js/packages/common/src/wallet-adapters/solong_adapter.tsx @@ -0,0 +1,57 @@ +import EventEmitter from "eventemitter3"; +import { PublicKey } from "@solana/web3.js"; +import { notify } from "../utils/notifications"; + +export class SolongAdapter extends EventEmitter { + _publicKey: any; + _onProcess: boolean; + constructor(providerUrl: string, network: string) { + super(); + this._publicKey = null; + this._onProcess = false; + this.connect = this.connect.bind(this); + } + + get publicKey() { + return this._publicKey; + } + + async signTransaction(transaction: any) { + return (window as any).solong.signTransaction(transaction); + } + + connect() { + if (this._onProcess) { + return; + } + + if ((window as any).solong === undefined) { + notify({ + message: "Solong Error", + description: "Please install solong wallet from Chrome ", + }); + return; + } + + this._onProcess = true; + (window as any).solong + .selectAccount() + .then((account: any) => { + this._publicKey = new PublicKey(account); + this.emit("connect", this._publicKey); + }) + .catch(() => { + this.disconnect(); + }) + .finally(() => { + this._onProcess = false; + }); + } + + disconnect() { + if (this._publicKey) { + this._publicKey = null; + this.emit("disconnect"); + } + } +} diff --git a/js/packages/common/src/wallet-adapters/torus/index.tsx b/js/packages/common/src/wallet-adapters/torus/index.tsx new file mode 100644 index 0000000..93ec631 --- /dev/null +++ b/js/packages/common/src/wallet-adapters/torus/index.tsx @@ -0,0 +1,98 @@ +import EventEmitter from "eventemitter3" +import { Keypair, PublicKey, Transaction } from "@solana/web3.js" +import { WalletAdapter } from "@solana/wallet-base" +import OpenLogin from "@toruslabs/openlogin" +import { getED25519Key } from "@toruslabs/openlogin-ed25519" + +const getSolanaPrivateKey = (openloginKey: string)=>{ + const { sk } = getED25519Key(openloginKey) + return sk +} + +export class TorusWalletAdapter extends EventEmitter implements WalletAdapter { + _provider: OpenLogin | undefined; + endpoint: string; + providerUrl: string; + account: Keypair | undefined; + image: string = ''; + name: string = ''; + + constructor(providerUrl: string, endpoint: string) { + super() + this.connect = this.connect.bind(this) + this.endpoint = endpoint; + this.providerUrl = providerUrl; + } + + async signAllTransactions(transactions: Transaction[]): Promise { + if(this.account) { + let account = this.account; + transactions.forEach(t => t.partialSign(account)); + } + + return transactions + } + + get publicKey() { + return this.account?.publicKey || null; + } + + async signTransaction(transaction: Transaction) { + if(this.account) { + transaction.partialSign(this.account) + } + + return transaction + } + + connect = async () => { + this._provider = new OpenLogin({ + clientId: process.env.REACT_APP_CLIENT_ID || 'BKBTX-SmaEFGddZQrwqd65YFoImRQLca_Tj2IdmKyD2UbDpzrtN2WQ-NYLuej6gP0DfF3jSpEkI13wPt1uPedm0', + network: "mainnet", // mainnet, testnet, development + uxMode: 'popup' + }); + + try { + await this._provider.init(); + } catch (ex) { + console.error('init failed', ex) + } + + console.error(this._provider?.state.store); + + if (this._provider.privKey) { + const privateKey = this._provider.privKey; + console.log(privateKey); + const secretKey = getSolanaPrivateKey(privateKey); + console.log(secretKey); + this.account = Keypair.fromSecretKey(secretKey); + } else { + try { + const { privKey } = await this._provider.login(); + console.log(privKey); + const secretKey = getSolanaPrivateKey(privKey); + console.log(secretKey); + this.account = Keypair.fromSecretKey(secretKey); + } catch(ex) { + console.error('login failed', ex); + } + } + + console.log(this.account?.publicKey.toBase58()); + + this.name = this._provider?.state.store.get('name');; + this.image = this._provider?.state.store.get('profileImage');; + + this.emit("connect"); + } + + disconnect = async () => { + console.log("Disconnecting...") + if (this._provider) { + await this._provider.logout(); + await this._provider._cleanup(); + this._provider = undefined; + this.emit("disconnect"); + } + } +} diff --git a/js/packages/common/tsconfig.json b/js/packages/common/tsconfig.json new file mode 100644 index 0000000..4d65d0b --- /dev/null +++ b/js/packages/common/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es2019", + + "outDir": "./dist/lib", + "rootDir": "./src", + + "composite": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "jsx": "react", + "strict": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "typeRoots": ["types", "../../types", "../../node_modules/@types"] + }, + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts", "**/node_modules"] +} diff --git a/js/packages/metaplex/.cache/.eslintrc.json b/js/packages/metaplex/.cache/.eslintrc.json new file mode 100644 index 0000000..7396d0e --- /dev/null +++ b/js/packages/metaplex/.cache/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "env": { + "browser": true + }, + "globals": { + "__PATH_PREFIX__": false, + "___emitter": false + } +} diff --git a/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js b/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js new file mode 100644 index 0000000..25a6de3 --- /dev/null +++ b/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js @@ -0,0 +1,9 @@ +// prefer default export if available +const preferDefault = m => (m && m.default) || m + +exports.components = { + "component---src-pages-404-tsx": () => import("./../../../src/pages/404.tsx" /* webpackChunkName: "component---src-pages-404-tsx" */), + "component---src-pages-contact-tsx": () => import("./../../../src/pages/contact.tsx" /* webpackChunkName: "component---src-pages-contact-tsx" */), + "component---src-pages-index-tsx": () => import("./../../../src/pages/index.tsx" /* webpackChunkName: "component---src-pages-index-tsx" */) +} + diff --git a/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/match-paths.json b/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/match-paths.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/match-paths.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/sync-requires.js b/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/sync-requires.js new file mode 100644 index 0000000..355d9d3 --- /dev/null +++ b/js/packages/metaplex/.cache/_this_is_virtual_fs_path_/$virtual/sync-requires.js @@ -0,0 +1,11 @@ + +// prefer default export if available +const preferDefault = m => (m && m.default) || m + + +exports.components = { + "component---src-pages-404-tsx": preferDefault(require("/Users/jprince/Documents/other/metaplex/js/packages/metaplex/src/pages/404.tsx")), + "component---src-pages-contact-tsx": preferDefault(require("/Users/jprince/Documents/other/metaplex/js/packages/metaplex/src/pages/contact.tsx")), + "component---src-pages-index-tsx": preferDefault(require("/Users/jprince/Documents/other/metaplex/js/packages/metaplex/src/pages/index.tsx")) +} + diff --git a/js/packages/metaplex/.cache/api-runner-browser-plugins.js b/js/packages/metaplex/.cache/api-runner-browser-plugins.js new file mode 100755 index 0000000..92a14b9 --- /dev/null +++ b/js/packages/metaplex/.cache/api-runner-browser-plugins.js @@ -0,0 +1,10 @@ +module.exports = [{ + plugin: require('../../../node_modules/gatsby-plugin-image/gatsby-browser.js'), + options: {"plugins":[]}, + },{ + plugin: require('../../../node_modules/gatsby-plugin-manifest/gatsby-browser.js'), + options: {"plugins":[],"background_color":"#000000","icon":"src/images/icon.png","legacy":true,"theme_color_in_head":true,"cache_busting_mode":"query","crossOrigin":"anonymous","include_favicon":true,"cacheDigest":"7df75940c5c4611dd59c4b1856069d9e"}, + },{ + plugin: require('../gatsby-browser.js'), + options: {"plugins":[]}, + }] diff --git a/js/packages/metaplex/.cache/api-runner-browser.js b/js/packages/metaplex/.cache/api-runner-browser.js new file mode 100644 index 0000000..0adf777 --- /dev/null +++ b/js/packages/metaplex/.cache/api-runner-browser.js @@ -0,0 +1,55 @@ +const plugins = require(`./api-runner-browser-plugins`) +const { + getResourceURLsForPathname, + loadPage, + loadPageSync, +} = require(`./loader`).publicLoader + +exports.apiRunner = (api, args = {}, defaultReturn, argTransform) => { + // Hooks for gatsby-cypress's API handler + if (process.env.CYPRESS_SUPPORT) { + if (window.___apiHandler) { + window.___apiHandler(api) + } else if (window.___resolvedAPIs) { + window.___resolvedAPIs.push(api) + } else { + window.___resolvedAPIs = [api] + } + } + + let results = plugins.map(plugin => { + if (!plugin.plugin[api]) { + return undefined + } + + args.getResourceURLsForPathname = getResourceURLsForPathname + args.loadPage = loadPage + args.loadPageSync = loadPageSync + + const result = plugin.plugin[api](args, plugin.options) + if (result && argTransform) { + args = argTransform({ args, result, plugin }) + } + return result + }) + + // Filter out undefined results. + results = results.filter(result => typeof result !== `undefined`) + + if (results.length > 0) { + return results + } else if (defaultReturn) { + return [defaultReturn] + } else { + return [] + } +} + +exports.apiRunnerAsync = (api, args, defaultReturn) => + plugins.reduce( + (previous, next) => + next.plugin[api] + ? previous.then(() => next.plugin[api](args, next.options)) + : previous, + Promise.resolve() + ) diff --git a/js/packages/metaplex/.cache/api-runner-ssr.js b/js/packages/metaplex/.cache/api-runner-ssr.js new file mode 100644 index 0000000..6a04ab4 --- /dev/null +++ b/js/packages/metaplex/.cache/api-runner-ssr.js @@ -0,0 +1,65 @@ +var plugins = [{ + name: 'gatsby-plugin-image', + plugin: require('/Users/jprince/Documents/other/metaplex/js/node_modules/gatsby-plugin-image/gatsby-ssr'), + options: {"plugins":[]}, + },{ + name: 'gatsby-plugin-react-helmet', + plugin: require('/Users/jprince/Documents/other/metaplex/js/node_modules/gatsby-plugin-react-helmet/gatsby-ssr'), + options: {"plugins":[]}, + },{ + name: 'gatsby-plugin-manifest', + plugin: require('/Users/jprince/Documents/other/metaplex/js/node_modules/gatsby-plugin-manifest/gatsby-ssr'), + options: {"plugins":[],"background_color":"#000000","icon":"src/images/icon.png","legacy":true,"theme_color_in_head":true,"cache_busting_mode":"query","crossOrigin":"anonymous","include_favicon":true,"cacheDigest":"7df75940c5c4611dd59c4b1856069d9e"}, + }] +// During bootstrap, we write requires at top of this file which looks like: +// var plugins = [ +// { +// plugin: require("/path/to/plugin1/gatsby-ssr.js"), +// options: { ... }, +// }, +// { +// plugin: require("/path/to/plugin2/gatsby-ssr.js"), +// options: { ... }, +// }, +// ] + +const apis = require(`./api-ssr-docs`) + +// Run the specified API in any plugins that have implemented it +module.exports = (api, args, defaultReturn, argTransform) => { + if (!apis[api]) { + console.log(`This API doesn't exist`, api) + } + + // Run each plugin in series. + // eslint-disable-next-line no-undef + let results = plugins.map(plugin => { + if (!plugin.plugin[api]) { + return undefined + } + try { + const result = plugin.plugin[api](args, plugin.options) + if (result && argTransform) { + args = argTransform({ args, result }) + } + return result + } catch (e) { + if (plugin.name !== `default-site-plugin`) { + // default-site-plugin is user code and will print proper stack trace, + // so no point in annotating error message pointing out which plugin is root of the problem + e.message += ` (from plugin: ${plugin.name})` + } + + throw e + } + }) + + // Filter out undefined results. + results = results.filter(result => typeof result !== `undefined`) + + if (results.length > 0) { + return results + } else { + return [defaultReturn] + } +} diff --git a/js/packages/metaplex/.cache/api-ssr-docs.js b/js/packages/metaplex/.cache/api-ssr-docs.js new file mode 100644 index 0000000..2fead5c --- /dev/null +++ b/js/packages/metaplex/.cache/api-ssr-docs.js @@ -0,0 +1,205 @@ +/** + * Object containing options defined in `gatsby-config.js` + * @typedef {object} pluginOptions + */ + +/** + * Replace the default server renderer. This is useful for integration with + * Redux, css-in-js libraries, etc. that need custom setups for server + * rendering. + * @param {object} $0 + * @param {string} $0.pathname The pathname of the page currently being rendered. + * @param {ReactNode} $0.bodyComponent The React element to be rendered as the page body + * @param {function} $0.replaceBodyHTMLString Call this with the HTML string + * you render. **WARNING** if multiple plugins implement this API it's the + * last plugin that "wins". TODO implement an automated warning against this. + * @param {function} $0.setHeadComponents Takes an array of components as its + * first argument which are added to the `headComponents` array which is passed + * to the `html.js` component. + * @param {function} $0.setHtmlAttributes Takes an object of props which will + * spread into the `` component. + * @param {function} $0.setBodyAttributes Takes an object of props which will + * spread into the `` component. + * @param {function} $0.setPreBodyComponents Takes an array of components as its + * first argument which are added to the `preBodyComponents` array which is passed + * to the `html.js` component. + * @param {function} $0.setPostBodyComponents Takes an array of components as its + * first argument which are added to the `postBodyComponents` array which is passed + * to the `html.js` component. + * @param {function} $0.setBodyProps Takes an object of data which + * is merged with other body props and passed to `html.js` as `bodyProps`. + * @param {pluginOptions} pluginOptions + * @example + * // From gatsby-plugin-glamor + * const { renderToString } = require("react-dom/server") + * const inline = require("glamor-inline") + * + * exports.replaceRenderer = ({ bodyComponent, replaceBodyHTMLString }) => { + * const bodyHTML = renderToString(bodyComponent) + * const inlinedHTML = inline(bodyHTML) + * + * replaceBodyHTMLString(inlinedHTML) + * } + */ +exports.replaceRenderer = true + +/** + * Called after every page Gatsby server renders while building HTML so you can + * set head and body components to be rendered in your `html.js`. + * + * Gatsby does a two-pass render for HTML. It loops through your pages first + * rendering only the body and then takes the result body HTML string and + * passes it as the `body` prop to your `html.js` to complete the render. + * + * It's often handy to be able to send custom components to your `html.js`. + * For example, it's a very common pattern for React.js libraries that + * support server rendering to pull out data generated during the render to + * add to your HTML. + * + * Using this API over [`replaceRenderer`](#replaceRenderer) is preferable as + * multiple plugins can implement this API where only one plugin can take + * over server rendering. However, if your plugin requires taking over server + * rendering then that's the one to + * use + * @param {object} $0 + * @param {string} $0.pathname The pathname of the page currently being rendered. + * @param {function} $0.setHeadComponents Takes an array of components as its + * first argument which are added to the `headComponents` array which is passed + * to the `html.js` component. + * @param {function} $0.setHtmlAttributes Takes an object of props which will + * spread into the `` component. + * @param {function} $0.setBodyAttributes Takes an object of props which will + * spread into the `` component. + * @param {function} $0.setPreBodyComponents Takes an array of components as its + * first argument which are added to the `preBodyComponents` array which is passed + * to the `html.js` component. + * @param {function} $0.setPostBodyComponents Takes an array of components as its + * first argument which are added to the `postBodyComponents` array which is passed + * to the `html.js` component. + * @param {function} $0.setBodyProps Takes an object of data which + * is merged with other body props and passed to `html.js` as `bodyProps`. + * @param {pluginOptions} pluginOptions + * @example + * // Import React so that you can use JSX in HeadComponents + * const React = require("react") + * + * const HtmlAttributes = { + * lang: "en" + * } + * + * const HeadComponents = [ + *
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/js/packages/metaplex/public/404/index.html b/js/packages/metaplex/public/404/index.html new file mode 100644 index 0000000..8581eac --- /dev/null +++ b/js/packages/metaplex/public/404/index.html @@ -0,0 +1,5 @@ +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/js/packages/metaplex/public/686-080c3ff771bb1242737e.js b/js/packages/metaplex/public/686-080c3ff771bb1242737e.js new file mode 100644 index 0000000..a1b7de3 --- /dev/null +++ b/js/packages/metaplex/public/686-080c3ff771bb1242737e.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[686],{6686:function(e,t,r){"use strict";r.r(t),r.d(t,{lazyHydrate:function(){return n}});var o=r(9186),i=r(2784),a=r(8316);r(2431),r(4651);function n(e,t,r,n){var c=e.image,d=e.loading,l=e.isLoading,g=e.isLoaded,s=e.toggleIsLoaded,u=e.ref,b=e.imgClassName,m=e.imgStyle,h=void 0===m?{}:m,f=e.objectPosition,j=e.backgroundColor,k=e.objectFit,y=void 0===k?"cover":k,C=(0,o._)(e,["image","loading","isLoading","isLoaded","toggleIsLoaded","ref","imgClassName","imgStyle","objectPosition","backgroundColor","objectFit"]),L=c.width,p=c.height,v=c.layout,w=c.images,N=c.placeholder,P=c.backgroundColor,E=JSON.stringify(w);h=(0,o.a)({objectFit:y,objectPosition:f,backgroundColor:j},h);var F=i.createElement(o.L,{layout:v,width:L,height:p},i.createElement(o.P,Object.assign({},(0,o.g)(N,g,v,L,p,P,y,f))),i.createElement(o.M,Object.assign({},C,{width:L,height:p,className:b},(0,o.b)(l,g,w,d,s,E,u,h))));return t.current&&((r.current||n.current?a.render:a.hydrate)(F,t.current),r.current=!0),function(){t.current&&(0,a.render)(null,t.current)}}}}]); +//# sourceMappingURL=686-080c3ff771bb1242737e.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/686-080c3ff771bb1242737e.js.map b/js/packages/metaplex/public/686-080c3ff771bb1242737e.js.map new file mode 100644 index 0000000..8366a8a --- /dev/null +++ b/js/packages/metaplex/public/686-080c3ff771bb1242737e.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/../src/components/lazy-hydrate.tsx"],"names":["lazyHydrate","root","hydrated","forceHydrate","image","loading","isLoading","isLoaded","toggleIsLoaded","ref","imgClassName","imgStyle","objectPosition","backgroundColor","objectFit","props","width","height","layout","images","placeholder","wrapperBackgroundColor","cacheKey","JSON","stringify","component","React","LayoutWrapper","Placeholder","getPlaceholderProps","MainImage","className","getMainProps","current","render","hydrate"],"mappings":"qNAgBgBA,IAedC,EACAC,EACAC,OAfEC,UACAC,YACAC,cACAC,aACAC,mBACAC,QACAC,qBACAC,sBAAW,KACXC,mBACAC,wBACAC,iCACGC,wJAOHC,EAMEZ,EANFY,MACAC,EAKEb,EALFa,OACAC,EAIEd,EAJFc,OACAC,EAGEf,EAHFe,OACAC,EAEEhB,EAFFgB,YACiBC,EACfjB,EADFS,gBAGIS,EAAWC,KAAKC,UAAUL,GAEhCR,WACEG,YACAF,iBACAC,mBACGF,GAGL,IAAMc,EACJC,gBAACC,KAAcT,OAAQA,EAAQF,MAAOA,EAAOC,OAAQA,GACnDS,gBAACE,sBACKC,OACFT,EACAb,EACAW,EACAF,EACAC,EACAI,EACAP,EACAF,KAIJc,gBAACI,qBACMf,GACLC,MAAOA,EACPC,OAAQA,EACRc,UAAWrB,IACPsB,OACF1B,EACAC,EACAY,EACAd,EACAG,EACAc,EACAb,EACAE,MAaR,OAPIV,EAAKgC,WAEU/B,EAAS+B,SAAW9B,EAAa8B,QAAUC,SAASC,WAC5DV,EAAWxB,EAAKgC,SACzB/B,EAAS+B,YAAU,WAIfhC,EAAKgC,UACPC,YAAQ,KAAkCjC,EAAKgC","file":"686-080c3ff771bb1242737e.js","sourcesContent":["import React, { MutableRefObject } from \"react\"\nimport { hydrate, render } from \"react-dom\"\nimport { GatsbyImageProps } from \"./gatsby-image.browser\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImageProps, MainImage } from \"./main-image\"\nimport { getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { ReactElement } from \"react\"\n\ntype LazyHydrateProps = Omit & {\n isLoading: boolean\n isLoaded: boolean // alwaystype SetStateAction = S | ((prevState: S) => S);\n toggleIsLoaded: (toggle: boolean) => void\n ref: MutableRefObject\n}\n\nexport function lazyHydrate(\n {\n image,\n loading,\n isLoading,\n isLoaded,\n toggleIsLoaded,\n ref,\n imgClassName,\n imgStyle = {},\n objectPosition,\n backgroundColor,\n objectFit = `cover`,\n ...props\n }: LazyHydrateProps,\n root: MutableRefObject,\n hydrated: MutableRefObject,\n forceHydrate: MutableRefObject\n): (() => void) | null {\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: wrapperBackgroundColor,\n } = image\n\n const cacheKey = JSON.stringify(images)\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const component = (\n \n \n\n )}\n width={width}\n height={height}\n className={imgClassName}\n {...getMainProps(\n isLoading,\n isLoaded,\n images,\n loading,\n toggleIsLoaded,\n cacheKey,\n ref,\n imgStyle\n )}\n />\n \n )\n\n if (root.current) {\n // Force render to mitigate \"Expected server HTML to contain a matching\" in develop\n const doRender = hydrated.current || forceHydrate.current ? render : hydrate\n doRender(component, root.current)\n hydrated.current = true\n }\n\n return (): void => {\n if (root.current) {\n render((null as unknown) as ReactElement, root.current)\n }\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/693-91ba8b834172e6d10b17.js b/js/packages/metaplex/public/693-91ba8b834172e6d10b17.js new file mode 100644 index 0000000..70a5157 --- /dev/null +++ b/js/packages/metaplex/public/693-91ba8b834172e6d10b17.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[693],{2693:function(e,t,r){"use strict";r.r(t),r.d(t,{lazyHydrate:function(){return n}});var o=r(2978),i=r(2784),a=r(8316);r(2431),r(4651);function n(e,t,r,n){var c=e.image,d=e.loading,l=e.isLoading,g=e.isLoaded,s=e.toggleIsLoaded,u=e.ref,b=e.imgClassName,m=e.imgStyle,h=void 0===m?{}:m,f=e.objectPosition,j=e.backgroundColor,k=e.objectFit,y=void 0===k?"cover":k,C=(0,o._)(e,["image","loading","isLoading","isLoaded","toggleIsLoaded","ref","imgClassName","imgStyle","objectPosition","backgroundColor","objectFit"]),L=c.width,p=c.height,v=c.layout,w=c.images,N=c.placeholder,P=c.backgroundColor,E=JSON.stringify(w);h=(0,o.a)({objectFit:y,objectPosition:f,backgroundColor:j},h);var F=i.createElement(o.L,{layout:v,width:L,height:p},i.createElement(o.P,Object.assign({},(0,o.g)(N,g,v,L,p,P,y,f))),i.createElement(o.M,Object.assign({},C,{width:L,height:p,className:b},(0,o.b)(l,g,w,d,s,E,u,h))));return t.current&&((r.current||n.current?a.render:a.hydrate)(F,t.current),r.current=!0),function(){t.current&&(0,a.render)(null,t.current)}}}}]); +//# sourceMappingURL=693-91ba8b834172e6d10b17.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/693-91ba8b834172e6d10b17.js.map b/js/packages/metaplex/public/693-91ba8b834172e6d10b17.js.map new file mode 100644 index 0000000..5bd623d --- /dev/null +++ b/js/packages/metaplex/public/693-91ba8b834172e6d10b17.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/../src/components/lazy-hydrate.tsx"],"names":["lazyHydrate","root","hydrated","forceHydrate","image","loading","isLoading","isLoaded","toggleIsLoaded","ref","imgClassName","imgStyle","objectPosition","backgroundColor","objectFit","props","width","height","layout","images","placeholder","wrapperBackgroundColor","cacheKey","JSON","stringify","component","React","LayoutWrapper","Placeholder","getPlaceholderProps","MainImage","className","getMainProps","current","render","hydrate"],"mappings":"qNAgBgBA,IAedC,EACAC,EACAC,OAfEC,UACAC,YACAC,cACAC,aACAC,mBACAC,QACAC,qBACAC,sBAAW,KACXC,mBACAC,wBACAC,iCACGC,wJAOHC,EAMEZ,EANFY,MACAC,EAKEb,EALFa,OACAC,EAIEd,EAJFc,OACAC,EAGEf,EAHFe,OACAC,EAEEhB,EAFFgB,YACiBC,EACfjB,EADFS,gBAGIS,EAAWC,KAAKC,UAAUL,GAEhCR,WACEG,YACAF,iBACAC,mBACGF,GAGL,IAAMc,EACJC,gBAACC,KAAcT,OAAQA,EAAQF,MAAOA,EAAOC,OAAQA,GACnDS,gBAACE,sBACKC,OACFT,EACAb,EACAW,EACAF,EACAC,EACAI,EACAP,EACAF,KAIJc,gBAACI,qBACMf,GACLC,MAAOA,EACPC,OAAQA,EACRc,UAAWrB,IACPsB,OACF1B,EACAC,EACAY,EACAd,EACAG,EACAc,EACAb,EACAE,MAaR,OAPIV,EAAKgC,WAEU/B,EAAS+B,SAAW9B,EAAa8B,QAAUC,SAASC,WAC5DV,EAAWxB,EAAKgC,SACzB/B,EAAS+B,YAAU,WAIfhC,EAAKgC,UACPC,YAAQ,KAAkCjC,EAAKgC","file":"693-91ba8b834172e6d10b17.js","sourcesContent":["import React, { MutableRefObject } from \"react\"\nimport { hydrate, render } from \"react-dom\"\nimport { GatsbyImageProps } from \"./gatsby-image.browser\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImageProps, MainImage } from \"./main-image\"\nimport { getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { ReactElement } from \"react\"\n\ntype LazyHydrateProps = Omit & {\n isLoading: boolean\n isLoaded: boolean // alwaystype SetStateAction = S | ((prevState: S) => S);\n toggleIsLoaded: (toggle: boolean) => void\n ref: MutableRefObject\n}\n\nexport function lazyHydrate(\n {\n image,\n loading,\n isLoading,\n isLoaded,\n toggleIsLoaded,\n ref,\n imgClassName,\n imgStyle = {},\n objectPosition,\n backgroundColor,\n objectFit = `cover`,\n ...props\n }: LazyHydrateProps,\n root: MutableRefObject,\n hydrated: MutableRefObject,\n forceHydrate: MutableRefObject\n): (() => void) | null {\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: wrapperBackgroundColor,\n } = image\n\n const cacheKey = JSON.stringify(images)\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const component = (\n \n \n\n )}\n width={width}\n height={height}\n className={imgClassName}\n {...getMainProps(\n isLoading,\n isLoaded,\n images,\n loading,\n toggleIsLoaded,\n cacheKey,\n ref,\n imgStyle\n )}\n />\n \n )\n\n if (root.current) {\n // Force render to mitigate \"Expected server HTML to contain a matching\" in develop\n const doRender = hydrated.current || forceHydrate.current ? render : hydrate\n doRender(component, root.current)\n hydrated.current = true\n }\n\n return (): void => {\n if (root.current) {\n render((null as unknown) as ReactElement, root.current)\n }\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/879-5af0dc917ee006e8f5af.js b/js/packages/metaplex/public/879-5af0dc917ee006e8f5af.js new file mode 100644 index 0000000..2c7e064 --- /dev/null +++ b/js/packages/metaplex/public/879-5af0dc917ee006e8f5af.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[879],{3879:function(){!function(){"use strict";if("undefined"!=typeof window){var t=window.navigator.userAgent.match(/Edge\/(\d{2})\./),e=t?parseInt(t[1],10):null,i=!!e&&16<=e&&e<=18;if("objectFit"in document.documentElement.style==0||i){var n=function(t,e,i){var n,o,l,a,d;if((i=i.split(" ")).length<2&&(i[1]=i[0]),"x"===t)n=i[0],o=i[1],l="left",a="right",d=e.clientWidth;else{if("y"!==t)return;n=i[1],o=i[0],l="top",a="bottom",d=e.clientHeight}if(n!==l&&o!==l){if(n!==a&&o!==a)return"center"===n||"50%"===n?(e.style[l]="50%",void(e.style["margin-"+l]=d/-2+"px")):void(0<=n.indexOf("%")?(n=parseInt(n,10))<50?(e.style[l]=n+"%",e.style["margin-"+l]=d*(n/-100)+"px"):(n=100-n,e.style[a]=n+"%",e.style["margin-"+a]=d*(n/-100)+"px"):e.style[l]=n);e.style[a]="0"}else e.style[l]="0"},o=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute("data-object-fit"),i=t.dataset?t.dataset.objectPosition:t.getAttribute("data-object-position");e=e||"cover",i=i||"50% 50%";var o=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),i=e.getPropertyValue("position"),n=e.getPropertyValue("overflow"),o=e.getPropertyValue("display");i&&"static"!==i||(t.style.position="relative"),"hidden"!==n&&(t.style.overflow="hidden"),o&&"inline"!==o||(t.style.display="block"),0===t.clientHeight&&(t.style.height="100%"),-1===t.className.indexOf("object-fit-polyfill")&&(t.className=t.className+" object-fit-polyfill")}(o),function(t){var e=window.getComputedStyle(t,null),i={"max-width":"none","max-height":"none","min-width":"0px","min-height":"0px",top:"auto",right:"auto",bottom:"auto",left:"auto","margin-top":"0px","margin-right":"0px","margin-bottom":"0px","margin-left":"0px"};for(var n in i)e.getPropertyValue(n)!==i[n]&&(t.style[n]=i[n])}(t),t.style.position="absolute",t.style.width="auto",t.style.height="auto","scale-down"===e&&(e=t.clientWidtho.clientWidth||"contain"===e&&t.clientWidth n.clientWidth || \"contain\" === e && t.clientWidth < n.clientWidth ? (t.style.top = \"0\", t.style.marginTop = \"0\", o(\"x\", t, i)) : (t.style.width = \"100%\", t.style.height = \"auto\", t.style.left = \"0\", t.style.marginLeft = \"0\", o(\"y\", t, i))));\n },\n i = function i(t) {\n if (void 0 === t || t instanceof Event) t = document.querySelectorAll(\"[data-object-fit]\");else if (t && t.nodeName) t = [t];else {\n if (\"object\" != typeof t || !t.length || !t[0].nodeName) return !1;\n t = t;\n }\n\n for (var e = 0; e < t.length; e++) {\n if (t[e].nodeName) {\n var i = t[e].nodeName.toLowerCase();\n\n if (\"img\" === i) {\n if (n) continue;\n t[e].complete ? l(t[e]) : t[e].addEventListener(\"load\", function () {\n l(this);\n });\n } else \"video\" === i ? 0 < t[e].readyState ? l(t[e]) : t[e].addEventListener(\"loadedmetadata\", function () {\n l(this);\n }) : l(t[e]);\n }\n }\n\n return !0;\n };\n\n \"loading\" === document.readyState ? document.addEventListener(\"DOMContentLoaded\", i) : i(), window.addEventListener(\"resize\", i), window.objectFitPolyfill = i;\n } else window.objectFitPolyfill = function () {\n return !1;\n };\n }\n}();"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/app-2f076d30e065ec55fdcd.js b/js/packages/metaplex/public/app-2f076d30e065ec55fdcd.js new file mode 100644 index 0000000..41b9a22 --- /dev/null +++ b/js/packages/metaplex/public/app-2f076d30e065ec55fdcd.js @@ -0,0 +1,3 @@ +/*! For license information please see app-2f076d30e065ec55fdcd.js.LICENSE.txt */ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[143],{8111:function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0},1357:function(t,e,n){"use strict";function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0||(o[n]=t[n]);return o},t.exports.default=t.exports,t.exports.__esModule=!0},742:function(t){function e(n,r){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(n,r)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0},9154:function(t){t.exports=function(){var t=!1;-1!==navigator.appVersion.indexOf("MSIE 10")&&(t=!0);var e,n=[],r="object"==typeof document&&document,o=t?r.documentElement.doScroll("left"):r.documentElement.doScroll,a="DOMContentLoaded",i=r&&(o?/^loaded|^c/:/^loaded|^i|^c/).test(r.readyState);return!i&&r&&r.addEventListener(a,e=function(){for(r.removeEventListener(a,e),i=1;e=n.shift();)e()}),function(t){i?setTimeout(t,0):n.push(t)}}()},9767:function(t,e,n){"use strict";n.d(e,{Z:function(){return et}});var r=n(6631),o=Math.abs,a=String.fromCharCode;function i(t){return t.trim()}function s(t,e,n){return t.replace(e,n)}function u(t,e){return t.indexOf(e)}function c(t,e){return 0|t.charCodeAt(e)}function l(t,e,n){return t.slice(e,n)}function f(t){return t.length}function p(t){return t.length}function d(t,e){return e.push(t),t}var h=1,v=1,m=0,g=0,y=0,w="";function b(t,e,n,r,o,a,i){return{value:t,root:e,parent:n,type:r,props:o,children:a,line:h,column:v,length:i,return:""}}function S(t,e,n){return b(t,e.root,e.parent,n,e.props,e.children,0)}function P(){return y=g>0?c(w,--g):0,v--,10===y&&(v=1,h--),y}function k(){return y=g2||_(y)>3?"":" "}function A(t,e){for(;--e&&k()&&!(y<48||y>102||y>57&&y<65||y>70&&y<97););return E(t,x()+(e<6&&32==C()&&32==k()))}function D(t){for(;k();)switch(y){case t:return g;case 34:case 39:return D(34===t||39===t?t:y);case 40:41===t&&D(t);break;case 92:k()}return g}function T(t,e){for(;k()&&t+y!==57&&(t+y!==84||47!==C()););return"/*"+E(e,g-1)+"*"+a(47===t?t:k())}function M(t){for(;!_(C());)k();return E(t,g)}var N="-ms-",$="-moz-",Z="-webkit-",U="comm",I="rule",F="decl";function W(t,e){for(var n="",r=p(t),o=0;o6)switch(c(t,e+1)){case 109:if(45!==c(t,e+4))break;case 102:return s(t,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+$+(108==c(t,e+3)?"$3":"$2-$3"))+t;case 115:return~u(t,"stretch")?H(s(t,"stretch","fill-available"),e)+t:t}break;case 4949:if(115!==c(t,e+1))break;case 6444:switch(c(t,f(t)-3-(~u(t,"!important")&&10))){case 107:return s(t,":",":"+Z)+t;case 101:return s(t,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Z+(45===c(t,14)?"inline-":"")+"box$3$1"+Z+"$2$3$1"+N+"$2box$3")+t}break;case 5936:switch(c(t,e+11)){case 114:return Z+t+N+s(t,/[svh]\w+-[tblr]{2}/,"tb")+t;case 108:return Z+t+N+s(t,/[svh]\w+-[tblr]{2}/,"tb-rl")+t;case 45:return Z+t+N+s(t,/[svh]\w+-[tblr]{2}/,"lr")+t}return Z+t+N+t+t}return t}function z(t){return O(G("",null,null,null,[""],t=R(t),0,[0],t))}function G(t,e,n,r,o,i,u,c,l){for(var p=0,h=0,v=u,m=0,g=0,y=0,w=1,b=1,S=1,E=0,_="",R=o,O=i,D=r,N=_;b;)switch(y=E,E=k()){case 34:case 39:case 91:case 40:N+=j(E);break;case 9:case 10:case 13:case 32:N+=L(y);break;case 92:N+=A(x()-1,7);continue;case 47:switch(C()){case 42:case 47:d(J(T(k(),x()),e,n),l);break;default:N+="/"}break;case 123*w:c[p++]=f(N)*S;case 125*w:case 59:case 0:switch(E){case 0:case 125:b=0;case 59+h:g>0&&f(N)-v&&d(g>32?B(N+";",r,n,v-1):B(s(N," ","")+";",r,n,v-2),l);break;case 59:N+=";";default:if(d(D=Q(N,e,n,p,h,o,c,_,R=[],O=[],v),i),123===E)if(0===h)G(N,e,D,D,R,i,v,c,O);else switch(m){case 100:case 109:case 115:G(t,D,D,r&&d(Q(t,D,D,0,0,o,c,_,o,R=[],v),O),o,O,v,c,r?R:O);break;default:G(N,D,D,D,[""],O,v,c,O)}}p=h=g=0,w=S=1,_=N="",v=u;break;case 58:v=1+f(N),g=y;default:if(w<1)if(123==E)--w;else if(125==E&&0==w++&&125==P())continue;switch(N+=a(E),E*w){case 38:S=h>0?1:(N+="\f",-1);break;case 44:c[p++]=(f(N)-1)*S,S=1;break;case 64:45===C()&&(N+=j(k())),m=C(),h=f(_=N+=M(x())),E++;break;case 45:45===y&&2==f(N)&&(w=0)}}return i}function Q(t,e,n,r,a,u,c,f,d,h,v){for(var m=a-1,g=0===a?u:[""],y=p(g),w=0,S=0,P=0;w0?g[k]+" "+C:s(C,/&\f/g,g[k])))&&(d[P++]=x);return b(t,e,n,0===a?I:f,d,h,v)}function J(t,e,n){return b(t,e,n,U,a(y),l(t,2,-2),0)}function B(t,e,n,r){return b(t,e,n,F,l(t,0,r),l(t,r+1,-1),r)}var K=function(t,e){return O(function(t,e){var n=-1,r=44;do{switch(_(r)){case 0:38===r&&12===C()&&(e[n]=1),t[n]+=M(g-1);break;case 2:t[n]+=j(r);break;case 4:if(44===r){t[++n]=58===C()?"&\f":"",e[n]=t[n].length;break}default:t[n]+=a(r)}}while(r=k());return t}(R(t),e))},V=new WeakMap,Y=function(t){if("rule"===t.type&&t.parent&&t.length){for(var e=t.value,n=t.parent,r=t.column===n.column&&t.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==t.props.length||58===e.charCodeAt(0)||V.get(n))&&!r){V.set(t,!0);for(var o=[],a=K(e,o),i=n.props,s=0,u=0;s=4;++r,o-=4)e=1540483477*(65535&(e=255&t.charCodeAt(r)|(255&t.charCodeAt(++r))<<8|(255&t.charCodeAt(++r))<<16|(255&t.charCodeAt(++r))<<24))+(59797*(e>>>16)<<16),n=1540483477*(65535&(e^=e>>>24))+(59797*(e>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&t.charCodeAt(r+2))<<16;case 2:n^=(255&t.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&t.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},a=n(5064),i=/[A-Z]|^ms/g,s=/_EMO_([^_]+?)_([^]*?)_EMO_/g,u=function(t){return 45===t.charCodeAt(1)},c=function(t){return null!=t&&"boolean"!=typeof t},l=(0,a.Z)((function(t){return u(t)?t:t.replace(i,"-$&").toLowerCase()})),f=function(t,e){switch(t){case"animation":case"animationName":if("string"==typeof e)return e.replace(s,(function(t,e,n){return d={name:e,styles:n,next:d},e}))}return 1===o[t]||u(t)||"number"!=typeof e||0===e?e:e+"px"};function p(t,e,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return d={name:n.name,styles:n.styles,next:d},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)d={name:r.name,styles:r.styles,next:d},r=r.next;return n.styles+";"}return function(t,e,n){var r="";if(Array.isArray(n))for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{},c=u.state,l=u.replace,f=void 0!==l&&l;if("number"==typeof e)t.history.go(e);else{c=n({},c,{key:Date.now()+""});try{i||f?t.history.replaceState(c,null,e):t.history.pushState(c,null,e)}catch(d){t.location[f?"replace":"assign"](e)}}a=r(t),i=!0;var p=new Promise((function(t){return s=t}));return o.forEach((function(t){return t({location:a,action:"PUSH"})})),p}}},a=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",e=t.indexOf("?"),n={pathname:e>-1?t.substr(0,e):t,search:e>-1?t.substr(e):""},r=0,o=[n],a=[null];return{get location(){return o[r]},addEventListener:function(t,e){},removeEventListener:function(t,e){},history:{get entries(){return o},get index(){return r},get state(){return a[r]},pushState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;r++,o.push({pathname:s,search:c.length?"?"+c:c}),a.push(t)},replaceState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;o[r]={pathname:s,search:c},a[r]=t},go:function(t){var e=r+t;e<0||e>a.length-1||(r=e)}}}},i=!("undefined"==typeof window||!window.document||!window.document.createElement),s=o(i?window:a()),u=s.navigate;e.V5=s},382:function(t,e,n){"use strict";e.__esModule=!0,e.shallowCompare=e.validateRedirect=e.insertParams=e.resolve=e.match=e.pick=e.startsWith=void 0;var r,o=n(7677),a=(r=o)&&r.__esModule?r:{default:r};var i=function(t,e){return t.substr(0,e.length)===e},s=function(t,e){for(var n=void 0,r=void 0,o=e.split("?")[0],i=d(o),s=""===i[0],c=p(t),f=0,h=c.length;fe.score?-1:t.index-e.index}))},d=function(t){return t.replace(/(^\/+|\/+$)/g,"").split("/")},h=function(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0})))&&n.length>0?"?"+n.join("&"):"")},v=["uri","path"];e.startsWith=i,e.pick=s,e.match=function(t,e){return s([{path:t}],e)},e.resolve=function(t,e){if(i(t,"/"))return t;var n=t.split("?"),r=n[0],o=n[1],a=e.split("?")[0],s=d(r),u=d(a);if(""===s[0])return h(a,o);if(!i(s[0],".")){var c=u.concat(s).join("/");return h(("/"===a?"":"/")+c,o)}for(var l=u.concat(s),f=[],p=0,v=l.length;p1?n-1:0),o=1;o0&&Array.isArray(r[0])&&(r=r[0]),this.transformers=r.map((function(t){return"function"==typeof t?t():t})),this.tag}return n(t,[{key:"interimTag",value:function(t,e){for(var n=arguments.length,o=Array(n>2?n-2:0),a=2;a0&&void 0!==arguments[0]?arguments[0]:i;return{onSubstitution:function(e,n){if(Array.isArray(e)){var r=e.length,o=t.separator,a=t.conjunction,i=t.serial,s=n.match(/(\n?[^\S\n]+)$/);if(e=s?e.join(o+s[1]):e.join(o+" "),a&&r>1){var u=e.lastIndexOf(o);e=e.slice(0,u)+(i?o:"")+" "+a+e.slice(u+1)}}return e}}};function u(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:"initial";return{onEndResult:function(e){if("initial"===t){var n=e.match(/^[^\S\n]*(?=\S)/gm),r=n&&Math.min.apply(Math,u(n.map((function(t){return t.length}))));if(r){var o=new RegExp("^.{"+r+"}","gm");return e.replace(o,"")}return e}if("all"===t)return e.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+t)}}},l=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return{onEndResult:function(e){if(""===t)return e.trim();if("start"===(t=t.toLowerCase())||"left"===t)return e.replace(/^\s*/,"");if("end"===t||"right"===t)return e.replace(/\s*$/,"");throw new Error("Side not supported: "+t)}}},f=(new a(s({separator:","}),c,l),new a(s({separator:",",conjunction:"and"}),c,l),new a(s({separator:",",conjunction:"or"}),c,l),function(t){return{onSubstitution:function(e,n){if(null==t||"string"!=typeof t)throw new Error("You need to specify a string character to split by.");return"string"==typeof e&&e.includes(t)&&(e=e.split(t)),e}}}),p=function(t){return null!=t&&!Number.isNaN(t)&&"boolean"!=typeof t},d=function(){return{onSubstitution:function(t){return Array.isArray(t)?t.filter(p):p(t)?t:""}}},h=(new a(f("\n"),d,s,c,l),function(t,e){return{onSubstitution:function(n,r){if(null==t||null==e)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return null==n?n:n.toString().replace(t,e)}}}),v=(new a(f("\n"),s,c,l,h(/&/g,"&"),h(//g,">"),h(/"/g,"""),h(/'/g,"'"),h(/`/g,"`")),function(t,e){return{onEndResult:function(n){if(null==t||null==e)throw new Error("replaceResultTransformer requires at least 2 arguments.");return n.replace(t,e)}}});new a(v(/(?:\n(?:\s*))+/g," "),l),new a(v(/(?:\n\s*)/g,""),l),new a(s({separator:","}),v(/(?:\s+)/g," "),l),new a(s({separator:",",conjunction:"or"}),v(/(?:\s+)/g," "),l),new a(s({separator:",",conjunction:"and"}),v(/(?:\s+)/g," "),l),new a(s,c,l),new a(s,v(/(?:\s+)/g," "),l),new a(c,l),new a(c("all"),l)},6694:function(t){"use strict";t.exports=Object.assign},4666:function(t,e,n){"use strict";var r=n(2250),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function u(t){return r.isMemo(t)?i:s[t.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,l=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,d=Object.getPrototypeOf,h=Object.prototype;t.exports=function t(e,n,r){if("string"!=typeof n){if(h){var o=d(n);o&&o!==h&&t(e,o,r)}var i=l(n);f&&(i=i.concat(f(n)));for(var s=u(e),v=u(n),m=0;m0)&&(r.unobserve(e),r.disconnect(),n())}))}))).observe(e),{instance:r,el:e}))},n.render=function(){var t=this,e=this.props,n=e.to,r=e.getProps,a=void 0===r?this.defaultGetProps:r,i=e.onClick,u=e.onMouseEnter,f=(e.activeClassName,e.activeStyle,e.innerRef,e.partiallyActive,e.state),d=e.replace,h=e._location,v=(0,o.default)(e,["to","getProps","onClick","onMouseEnter","activeClassName","activeStyle","innerRef","partiallyActive","state","replace","_location"]);var m=y(n,h.pathname);return g(m)?c.default.createElement(l.Link,(0,s.default)({to:m,state:f,getProps:a,innerRef:this.handleRef,onMouseEnter:function(t){u&&u(t),___loader.hovering((0,p.parsePath)(m).pathname)},onClick:function(e){if(i&&i(e),!(0!==e.button||t.props.target||e.defaultPrevented||e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)){e.preventDefault();var n=d,r=encodeURI(m)===h.pathname;"boolean"!=typeof d&&r&&(n=!0),window.___navigate(m,{state:f,replace:n})}return!0}},v)):c.default.createElement("a",(0,s.default)({href:m},v))},e}(c.default.Component);S.propTypes=(0,s.default)({},w,{onClick:u.default.func,to:u.default.string.isRequired,replace:u.default.bool,state:u.default.object});var P=c.default.forwardRef((function(t,e){return c.default.createElement(b,(0,s.default)({innerRef:e},t))}));e.ZP=P;e.c4=function(t,e){window.___navigate(y(t,window.location.pathname),e)}},3762:function(t,e){"use strict";e.__esModule=!0,e.parsePath=function(t){var e=t||"/",n="",r="",o=e.indexOf("#");-1!==o&&(r=e.substr(o),e=e.substr(0,o));var a=e.indexOf("?");-1!==a&&(n=e.substr(a),e=e.substr(0,a));return{pathname:e,search:"?"===n?"":n,hash:"#"===r?"":r}}},2802:function(t,e,n){"use strict";e.p2=e.$C=void 0;var r=n(1415);e.$C=r.ScrollHandler;var o=n(5492);e.p2=o.useScrollRestoration},1415:function(t,e,n){"use strict";var r=n(4859);e.__esModule=!0,e.ScrollHandler=e.ScrollContext=void 0;var o=r(n(8111)),a=r(n(7111)),i=function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=c(e);if(n&&n.has(t))return n.get(t);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if("default"!==a&&Object.prototype.hasOwnProperty.call(t,a)){var i=o?Object.getOwnPropertyDescriptor(t,a):null;i&&(i.get||i.set)?Object.defineProperty(r,a,i):r[a]=t[a]}r.default=t,n&&n.set(t,r);return r}(n(2784)),s=r(n(3980)),u=n(643);function c(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(c=function(t){return t?n:e})(t)}var l=i.createContext(new u.SessionStorage);e.ScrollContext=l,l.displayName="GatsbyScrollContext";var f=function(t){function e(){for(var e,n=arguments.length,r=new Array(n),a=0;a=0||(o[n]=t[n]);return o}var l=new Set,f=function(){return"undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype};function p(t){t&&l.add(t)}function d(t){return l.has(t)}var h=function(t){var e;return function(t){var e,n;return Boolean(null==t||null==(e=t.images)||null==(n=e.fallback)?void 0:n.src)}(t)?t:function(t){return Boolean(null==t?void 0:t.gatsbyImageData)}(t)?t.gatsbyImageData:null==t||null==(e=t.childImageSharp)?void 0:e.gatsbyImageData};function v(t,e,r,o,a,i,u,c){var l,f;return void 0===c&&(c={}),null!=u&&u.current&&!("objectFit"in document.documentElement.style)&&(u.current.dataset.objectFit=null!=(l=c.objectFit)?l:"cover",u.current.dataset.objectPosition=""+(null!=(f=c.objectPosition)?f:"50% 50%"),function(t){try{var e=function(){window.objectFitPolyfill(t.current)},r=function(){if(!("objectFitPolyfill"in window))return Promise.resolve(n.e(879).then(n.t.bind(n,3879,23))).then((function(){}))}();Promise.resolve(r&&r.then?r.then(e):e())}catch(t){return Promise.reject(t)}}(u)),s({},r,{loading:o,shouldLoad:t,"data-main-image":"",style:s({},c,{opacity:e?1:0}),onLoad:function(t){if(!e){p(i);var n=t.currentTarget,r=new Image;r.src=n.currentSrc,r.decode?r.decode().catch((function(){})).then((function(){a(!0)})):a(!0)}},ref:u})}function m(t,e,n,r,o,a,i,u){var c={};a&&(c.backgroundColor=a,"fixed"===n?(c.width=r,c.height=o,c.backgroundColor=a,c.position="relative"):("constrained"===n||"fullWidth"===n)&&(c.position="absolute",c.top=0,c.left=0,c.bottom=0,c.right=0)),i&&(c.objectFit=i),u&&(c.objectPosition=u);var l=s({},t,{"aria-hidden":!0,"data-placeholder-image":"",style:s({opacity:e?0:1,transition:"opacity 500ms linear"},c)});return l}var g,y=function(t){var e=t.layout,n=t.width,o=t.height;return"fullWidth"===e?r.createElement("div",{"aria-hidden":!0,style:{paddingTop:o/n*100+"%"}}):"constrained"===e?r.createElement("div",{style:{maxWidth:n,display:"block"}},r.createElement("img",{alt:"",role:"presentation","aria-hidden":"true",src:"data:image/svg+xml;charset=utf-8,%3Csvg height='"+o+"' width='"+n+"' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E",style:{maxWidth:"100%",display:"block",position:"static"}})):null},w=function(t){var e=t.children,n=c(t,["children"]);return r.createElement(r.Fragment,null,r.createElement(y,Object.assign({},n)),e,!1)},b=function(t){var e=t.src,n=t.srcSet,o=t.loading,a=t.alt,i=void 0===a?"":a,s=t.shouldLoad,u=t.innerRef,l=c(t,["src","srcSet","loading","alt","shouldLoad","innerRef"]);return r.createElement("img",Object.assign({},l,{decoding:"async",loading:o,src:s?e:void 0,"data-src":s?void 0:e,srcSet:s?n:void 0,"data-srcset":s?void 0:n,alt:i,ref:u}))},S=(0,r.forwardRef)((function(t,e){var n=t.fallback,o=t.sources,a=void 0===o?[]:o,i=t.shouldLoad,s=void 0===i||i,u=c(t,["fallback","sources","shouldLoad"]),l=u.sizes||(null==n?void 0:n.sizes),f=r.createElement(b,Object.assign({},u,n,{sizes:l,shouldLoad:s,innerRef:e}));return a.length?r.createElement("picture",null,a.map((function(t){var e=t.media,n=t.srcSet,o=t.type;return r.createElement("source",{key:e+"-"+o+"-"+n,type:o,media:e,srcSet:s?n:void 0,"data-srcset":s?void 0:n,sizes:l})})),f):f}));b.propTypes={src:o.string.isRequired,alt:o.string.isRequired,sizes:o.string,srcSet:o.string,shouldLoad:o.bool},S.displayName="Picture",S.propTypes={alt:o.string.isRequired,shouldLoad:o.bool,fallback:(0,o.exact)({src:o.string.isRequired,srcSet:o.string,sizes:o.string}),sources:(0,o.arrayOf)((0,o.oneOfType)([(0,o.exact)({media:o.string.isRequired,type:o.string,sizes:o.string,srcSet:o.string.isRequired}),(0,o.exact)({media:o.string,type:o.string.isRequired,sizes:o.string,srcSet:o.string.isRequired})]))};var P=function(t){var e=t.fallback,n=c(t,["fallback"]);return e?r.createElement(S,Object.assign({},n,{fallback:{src:e},"aria-hidden":!0,alt:""})):r.createElement("div",Object.assign({},n))};P.displayName="Placeholder",P.propTypes={fallback:o.string,sources:null==(g=S.propTypes)?void 0:g.sources,alt:function(t,e,n){return t[e]?new Error("Invalid prop `"+e+"` supplied to `"+n+"`. Validation failed."):null}};var k=(0,r.forwardRef)((function(t,e){return r.createElement(r.Fragment,null,r.createElement(S,Object.assign({ref:e},t)),r.createElement("noscript",null,r.createElement(S,Object.assign({},t,{shouldLoad:!0}))))}));k.displayName="MainImage",k.propTypes=S.propTypes;var C=function(t,e,n){return t.alt||""===t.alt?a().string.apply(a(),[t,e,n].concat([].slice.call(arguments,3))):new Error('The "alt" prop is required in '+n+'. If the image is purely presentational then pass an empty string: e.g. alt="". Learn more: https://a11y-style-guide.com/style-guide/section-media.html')},x={image:a().object.isRequired,alt:C},E=function(t){var e,o;function a(e){var n;return(n=t.call(this,e)||this).root=(0,r.createRef)(),n.hydrated={current:!1},n.forceRender={current:!1},n.lazyHydrator=null,n.ref=(0,r.createRef)(),n.state={isLoading:f(),isLoaded:!1},n}o=t,(e=a).prototype=Object.create(o.prototype),e.prototype.constructor=e,u(e,o);var l=a.prototype;return l._lazyHydrate=function(t,e){var r=this,o=this.root.current.querySelector("[data-gatsby-image-ssr]");return f()&&o&&!this.hydrated.current?(this.hydrated.current=!0,Promise.resolve()):n.e(686).then(n.bind(n,6686)).then((function(n){r.lazyHydrator=(0,n.lazyHydrate)(s({image:t.image.images,isLoading:e.isLoading,isLoaded:e.isLoaded,toggleIsLoaded:function(){null==t.onLoad||t.onLoad(),r.setState({isLoaded:!0})},ref:r.ref},t),r.root,r.hydrated,r.forceRender)}))},l._setupIntersectionObserver=function(t){var e=this;void 0===t&&(t=!0),n.e(351).then(n.bind(n,3351)).then((function(n){var r=(0,n.createIntersectionObserver)((function(){if(e.root.current){var n=JSON.stringify(e.props.image.images);null==e.props.onStartLoad||e.props.onStartLoad({wasCached:t&&d(n)}),e.setState({isLoading:!0,isLoaded:t&&d(n)})}}));e.root.current&&(e.unobserveRef=r(e.root))}))},l.shouldComponentUpdate=function(t,e){var n=this,r=!1;return this.state.isLoading||!e.isLoading||e.isLoaded||(this.forceRender.current=!0),this.props.image.images!==t.image.images&&(this.unobserveRef&&(this.unobserveRef(),this.hydrated.current&&this.lazyHydrator&&(0,i.render)(null,this.root.current)),this.setState({isLoading:!1,isLoaded:!1},(function(){n._setupIntersectionObserver(!1)})),r=!0),this.root.current&&!r&&this._lazyHydrate(t,e),!1},l.componentDidMount=function(){if(this.root.current){var t=this.root.current.querySelector("[data-gatsby-image-ssr]"),e=JSON.stringify(this.props.image.images);if(f()&&t){var n,r;if(null==(n=(r=this.props).onStartLoad)||n.call(r,{wasCached:!1}),t.complete){var o,a;null==(o=(a=this.props).onLoad)||o.call(a),p(e)}else{var i=this;t.addEventListener("load",(function n(){t.removeEventListener("load",n),null==i.props.onLoad||i.props.onLoad(),p(e)}))}return}this._setupIntersectionObserver(!0)}},l.componentWillUnmount=function(){this.unobserveRef&&(this.unobserveRef(),this.hydrated.current&&this.lazyHydrator&&this.lazyHydrator())},l.render=function(){var t=this.props.as||"div",e=this.props.image,n=e.width,o=e.height,a=e.layout,i=function(t,e,n){var r={},o="gatsby-image-wrapper";return"fixed"===n?(r.width=t,r.height=e):"constrained"===n&&(o="gatsby-image-wrapper gatsby-image-wrapper-constrained"),{className:o,"data-gatsby-image-wrapper":"",style:r}}(n,o,a),u=i.style,l=i.className,f=c(i,["style","className"]),p=this.props.className;this.props.class&&(p=this.props.class);var d=function(t,e,n){var r=null;return"fullWidth"===t&&(r=''),"constrained"===t&&(r='
"),r}(a,n,o);return r.createElement(t,Object.assign({},f,{style:s({},u,this.props.style,{backgroundColor:this.props.backgroundColor}),className:l+(p?" "+p:""),ref:this.root,dangerouslySetInnerHTML:{__html:d},suppressHydrationWarning:!0}))},a}(r.Component),_=function(t){if(!t.image)return null;var e=t.image,n=JSON.stringify([e.width,e.height,e.layout,t.className,t.class,t.backgroundColor]);return r.createElement(E,Object.assign({key:n},t))};_.propTypes=x,_.displayName="GatsbyImage";var R,O=function(t,e){return"fullWidth"!==t.layout||"width"!==e&&"height"!==e||!t[e]?a().number.apply(a(),[t,e].concat([].slice.call(arguments,2))):new Error('"'+e+'" '+t[e]+" may not be passed when layout is fullWidth.")},j=new Set(["fixed","fullWidth","constrained"]),L={src:a().string.isRequired,alt:C,width:O,height:O,sizes:a().string,layout:function(t){if(void 0!==t.layout&&!j.has(t.layout))return new Error("Invalid value "+t.layout+'" provided for prop "layout". Defaulting to "constrained". Valid values are "fixed", "fullWidth" or "constrained".')}},A=(R=_,function(t){var e=t.src,n=t.__imageData,o=t.__error,a=c(t,["src","__imageData","__error","width","height","aspectRatio","tracedSVGOptions","placeholder","formats","quality","transformOptions","jpgOptions","pngOptions","webpOptions","avifOptions","blurredOptions"]);return o&&console.warn(o),n?r.createElement(R,Object.assign({image:n},a)):(console.warn("Image not loaded",e),null)});function D(t){var e=t.children;return(0,r.useEffect)((function(){n.e(686).then(n.bind(n,6686))}),[]),e}A.displayName="StaticImage",A.propTypes=L},4635:function(t,e,n){"use strict";n.r(e),n.d(e,{wrapRootElement:function(){return a}});n(2784);var r=n(9186),o=n(8832);function a(t){var e=t.element;return(0,o.tZ)(r.c,null,e)}},425:function(t,e,n){"use strict";var r=n(4859);n(8447),r(n(7118))},7118:function(t,e){"use strict";e.__esModule=!0,e.default=void 0;e.default=function(t,e){var n="manifest.webmanifest";if(!Array.isArray(e))return n;var r=e.find((function(e){return t.startsWith(e.start_url)}));return r?"manifest_"+r.lang+".webmanifest":n}},3857:function(t,e,n){e.components={"component---src-pages-404-tsx":function(){return n.e(180).then(n.bind(n,388))},"component---src-pages-contact-tsx":function(){return Promise.all([n.e(218),n.e(650)]).then(n.bind(n,8895))},"component---src-pages-index-tsx":function(){return Promise.all([n.e(218),n.e(691)]).then(n.bind(n,59))}}},7386:function(t,e,n){t.exports=[{plugin:n(4635),options:{plugins:[]}},{plugin:n(425),options:{plugins:[],background_color:"#000000",icon:"src/images/icon.png",legacy:!0,theme_color_in_head:!0,cache_busting_mode:"query",crossOrigin:"anonymous",include_favicon:!0,cacheDigest:"7df75940c5c4611dd59c4b1856069d9e"}},{plugin:n(7630),options:{plugins:[]}}]},1625:function(t,e,n){var r=n(7386),o=n(77).jN,a=o.getResourceURLsForPathname,i=o.loadPage,s=o.loadPageSync;e.h=function(t,e,n,o){void 0===e&&(e={});var u=r.map((function(n){if(n.plugin[t]){e.getResourceURLsForPathname=a,e.loadPage=i,e.loadPageSync=s;var r=n.plugin[t](e,n.options);return r&&o&&(e=o({args:e,result:r,plugin:n})),r}}));return(u=u.filter((function(t){return void 0!==t}))).length>0?u:n?[n]:[]},e.I=function(t,e,n){return r.reduce((function(n,r){return r.plugin[t]?n.then((function(){return r.plugin[t](e,r.options)})):n}),Promise.resolve())}},9831:function(t,e,n){"use strict";n.d(e,{Z:function(){return r}});var r=function(t){return t=t||Object.create(null),{on:function(e,n){(t[e]||(t[e]=[])).push(n)},off:function(e,n){t[e]&&t[e].splice(t[e].indexOf(n)>>>0,1)},emit:function(e,n){(t[e]||[]).slice().map((function(t){t(n)})),(t["*"]||[]).slice().map((function(t){t(e,n)}))}}}()},9843:function(t,e,n){"use strict";n.d(e,{UD:function(){return p},Cj:function(){return h},GA:function(){return d},DS:function(){return f}});var r=n(382),o=n(7272),a=function(t){return void 0===t?t:"/"===t?"/":"/"===t.charAt(t.length-1)?t.slice(0,-1):t},i=n(2407),s=new Map,u=[],c=function(t){var e=decodeURIComponent(t);return(0,o.Z)(e,decodeURIComponent("")).split("#")[0].split("?")[0]};function l(t){return t.startsWith("/")||t.startsWith("https://")||t.startsWith("http://")?t:new URL(t,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname}var f=function(t){u=t},p=function(t){var e=v(t),n=u.map((function(t){var e=t.path;return{path:t.matchPath,originalPath:e}})),o=(0,r.pick)(n,e);return o?a(o.route.originalPath):null},d=function(t){var e=v(t),n=u.map((function(t){var e=t.path;return{path:t.matchPath,originalPath:e}})),o=(0,r.pick)(n,e);return o?o.params:{}},h=function t(e){var n=c(l(e));if(s.has(n))return s.get(n);var r=(0,i.J)(e);if(r)return t(r.toPath);var o=p(n);return o||(o=v(e)),s.set(n,o),o},v=function(t){var e=c(l(t));return"/index.html"===e&&(e="/"),e=a(e)}},8447:function(t,e,n){"use strict";n.r(e),n.d(e,{Link:function(){return o.ZP},withAssetPrefix:function(){return o.mc},withPrefix:function(){return o.dq},graphql:function(){return v},parsePath:function(){return o.cP},navigate:function(){return o.c4},useScrollRestoration:function(){return a.p2},StaticQueryContext:function(){return f},StaticQuery:function(){return d},PageRenderer:function(){return s.a},useStaticQuery:function(){return h},prefetchPathname:function(){return l}});var r=n(2784),o=n(6739),a=n(2802),i=n(1553),s=n.n(i),u=n(77),c=n(8832),l=u.ZP.enqueue,f=r.createContext({});function p(t){var e=t.staticQueryData,n=t.data,o=t.query,a=t.render,i=n?n.data:e[o]&&e[o].data;return(0,c.tZ)(r.Fragment,null,i&&a(i),!i&&(0,c.tZ)("div",null,"Loading (StaticQuery)"))}var d=function(t){var e=t.data,n=t.query,r=t.render,o=t.children;return(0,c.tZ)(f.Consumer,null,(function(t){return(0,c.tZ)(p,{data:e,query:n,render:r||o,staticQueryData:t})}))},h=function(t){var e;r.useContext;var n=r.useContext(f);if(isNaN(Number(t)))throw new Error("useStaticQuery was called with a string but expects to be called using `graphql`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql`"+t+"`);\n");if(null!==(e=n[t])&&void 0!==e&&e.data)return n[t].data;throw new Error("The result of this StaticQuery could not be fetched.\n\nThis is likely a bug in Gatsby and if refreshing the page does not fix it, please open an issue in https://github.com/gatsbyjs/gatsby/issues")};function v(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls are supposed to only be evaluated at compile time, and then compiled away. Unfortunately, something went wrong and the query was left in the compiled code.\n\nUnless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.")}},77:function(t,e,n){"use strict";n.d(e,{uQ:function(){return l},kL:function(){return y},ZP:function(){return S},hs:function(){return P},jN:function(){return b},N1:function(){return w}});var r=n(5491),o=n(1746),a=function(t){if("undefined"==typeof document)return!1;var e=document.createElement("link");try{if(e.relList&&"function"==typeof e.relList.supports)return e.relList.supports(t)}catch(n){return!1}return!1}("prefetch")?function(t,e){return new Promise((function(n,r){if("undefined"!=typeof document){var o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",t),Object.keys(e).forEach((function(t){o.setAttribute(t,e[t])})),o.onload=n,o.onerror=r,(document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode).appendChild(o)}else r()}))}:function(t){return new Promise((function(e,n){var r=new XMLHttpRequest;r.open("GET",t,!0),r.onload=function(){200===r.status?e():n()},r.send(null)}))},i={},s=function(t,e){return new Promise((function(n){i[t]?n():a(t,e).then((function(){n(),i[t]=!0})).catch((function(){}))}))},u=n(9831),c=n(9843),l={Error:"error",Success:"success"},f=function(t){return t&&t.default||t},p=function(t){return"/page-data/"+("/"===t?"index":function(t){return(t="/"===t[0]?t.slice(1):t).endsWith("/")?t.slice(0,-1):t}(t))+"/page-data.json"};function d(t,e){return void 0===e&&(e="GET"),new Promise((function(n,r){var o=new XMLHttpRequest;o.open(e,t,!0),o.onreadystatechange=function(){4==o.readyState&&n(o)},o.send(null)}))}var h,v=function(t,e){void 0===e&&(e=null);var n={componentChunkName:t.componentChunkName,path:t.path,webpackCompilationHash:t.webpackCompilationHash,matchPath:t.matchPath,staticQueryHashes:t.staticQueryHashes};return{component:e,json:t.result,page:n}},m=function(){function t(t,e){this.inFlightNetworkRequests=new Map,this.pageDb=new Map,this.inFlightDb=new Map,this.staticQueryDb={},this.pageDataDb=new Map,this.prefetchTriggered=new Set,this.prefetchCompleted=new Set,this.loadComponent=t,(0,c.DS)(e)}var e=t.prototype;return e.memoizedGet=function(t){var e=this,n=this.inFlightNetworkRequests.get(t);return n||(n=d(t,"GET"),this.inFlightNetworkRequests.set(t,n)),n.then((function(n){return e.inFlightNetworkRequests.delete(t),n})).catch((function(n){throw e.inFlightNetworkRequests.delete(t),n}))},e.setApiRunner=function(t){this.apiRunner=t,this.prefetchDisabled=t("disableCorePrefetching").some((function(t){return t}))},e.fetchPageDataJson=function(t){var e=this,n=t.pagePath,r=t.retries,o=void 0===r?0:r,a=p(n);return this.memoizedGet(a).then((function(r){var a=r.status,i=r.responseText;if(200===a)try{var s=JSON.parse(i);if(void 0===s.path)throw new Error("not a valid pageData response");return Object.assign(t,{status:l.Success,payload:s})}catch(u){}return 404===a||200===a?"/404.html"===n?Object.assign(t,{status:l.Error}):e.fetchPageDataJson(Object.assign(t,{pagePath:"/404.html",notFound:!0})):500===a?Object.assign(t,{status:l.Error}):o<3?e.fetchPageDataJson(Object.assign(t,{retries:o+1})):Object.assign(t,{status:l.Error})}))},e.loadPageDataJson=function(t){var e=this,n=(0,c.Cj)(t);if(this.pageDataDb.has(n)){var r=this.pageDataDb.get(n);return Promise.resolve(r)}return this.fetchPageDataJson({pagePath:n}).then((function(t){return e.pageDataDb.set(n,t),t}))},e.findMatchPath=function(t){return(0,c.UD)(t)},e.loadPage=function(t){var e=this,n=(0,c.Cj)(t);if(this.pageDb.has(n)){var r=this.pageDb.get(n);return r.error?{error:r.error,status:r.status}:Promise.resolve(r.payload)}if(this.inFlightDb.has(n))return this.inFlightDb.get(n);var o=Promise.all([this.loadAppData(),this.loadPageDataJson(n)]).then((function(t){var r=t[1];if(r.status===l.Error)return{status:l.Error};var o=r.payload,a=o,i=a.componentChunkName,s=a.staticQueryHashes,c=void 0===s?[]:s,f={},p=e.loadComponent(i).then((function(e){var n;return f.createdAt=new Date,!e||e instanceof Error?(f.status=l.Error,f.error=e):(f.status=l.Success,!0===r.notFound&&(f.notFound=!0),o=Object.assign(o,{webpackCompilationHash:t[0]?t[0].webpackCompilationHash:""}),n=v(o,e)),n})),d=Promise.all(c.map((function(t){if(e.staticQueryDb[t]){var n=e.staticQueryDb[t];return{staticQueryHash:t,jsonPayload:n}}return e.memoizedGet("/page-data/sq/d/"+t+".json").then((function(e){var n=JSON.parse(e.responseText);return{staticQueryHash:t,jsonPayload:n}})).catch((function(){throw new Error("We couldn't load \"/page-data/sq/d/"+t+'.json"')}))}))).then((function(t){var n={};return t.forEach((function(t){var r=t.staticQueryHash,o=t.jsonPayload;n[r]=o,e.staticQueryDb[r]=o})),n}));return Promise.all([p,d]).then((function(t){var r,o=t[0],a=t[1];return o&&(r=Object.assign({},o,{staticQueryResults:a}),f.payload=r,u.Z.emit("onPostLoadPageResources",{page:r,pageResources:r})),e.pageDb.set(n,f),f.error?{error:f.error,status:f.status}:r})).catch((function(t){return{error:t,status:l.Error}}))}));return o.then((function(){e.inFlightDb.delete(n)})).catch((function(t){throw e.inFlightDb.delete(n),t})),this.inFlightDb.set(n,o),o},e.loadPageSync=function(t,e){void 0===e&&(e={});var n=(0,c.Cj)(t);if(this.pageDb.has(n)){var r,o=this.pageDb.get(n);if(o.payload)return o.payload;if(null!==(r=e)&&void 0!==r&&r.withErrorDetails)return{error:o.error,status:o.status}}},e.shouldPrefetch=function(t){return!!function(){if("connection"in navigator&&void 0!==navigator.connection){if((navigator.connection.effectiveType||"").includes("2g"))return!1;if(navigator.connection.saveData)return!1}return!0}()&&!this.pageDb.has(t)},e.prefetch=function(t){var e=this;if(!this.shouldPrefetch(t))return!1;if(this.prefetchTriggered.has(t)||(this.apiRunner("onPrefetchPathname",{pathname:t}),this.prefetchTriggered.add(t)),this.prefetchDisabled)return!1;var n=(0,c.Cj)(t);return this.doPrefetch(n).then((function(){e.prefetchCompleted.has(t)||(e.apiRunner("onPostPrefetchPathname",{pathname:t}),e.prefetchCompleted.add(t))})),!0},e.doPrefetch=function(t){var e=this,n=p(t);return s(n,{crossOrigin:"anonymous",as:"fetch"}).then((function(){return e.loadPageDataJson(t)}))},e.hovering=function(t){this.loadPage(t)},e.getResourceURLsForPathname=function(t){var e=(0,c.Cj)(t),n=this.pageDataDb.get(e);if(n){var r=v(n.payload);return[].concat((0,o.Z)(g(r.page.componentChunkName)),[p(e)])}return null},e.isPageNotFound=function(t){var e=(0,c.Cj)(t),n=this.pageDb.get(e);return!n||n.notFound},e.loadAppData=function(t){var e=this;return void 0===t&&(t=0),this.memoizedGet("/page-data/app-data.json").then((function(n){var r,o=n.status,a=n.responseText;if(200!==o&&t<3)return e.loadAppData(t+1);if(200===o)try{var i=JSON.parse(a);if(void 0===i.webpackCompilationHash)throw new Error("not a valid app-data response");r=i}catch(s){}return r}))},t}(),g=function(t){return(window.___chunkMapping[t]||[]).map((function(t){return""+t}))},y=function(t){function e(e,n){return t.call(this,(function(t){if(!e.components[t])throw new Error("We couldn't find the correct component chunk with the name "+t);return e.components[t]().then(f).catch((function(t){return t}))}),n)||this}(0,r.Z)(e,t);var n=e.prototype;return n.doPrefetch=function(e){return t.prototype.doPrefetch.call(this,e).then((function(t){if(t.status!==l.Success)return Promise.resolve();var e=t.payload,n=e.componentChunkName,r=g(n);return Promise.all(r.map(s)).then((function(){return e}))}))},n.loadPageDataJson=function(e){return t.prototype.loadPageDataJson.call(this,e).then((function(t){return t.notFound?d(e,"HEAD").then((function(e){return 200===e.status?{status:l.Error}:t})):t}))},e}(m),w=function(t){h=t},b={enqueue:function(t){return h.prefetch(t)},getResourceURLsForPathname:function(t){return h.getResourceURLsForPathname(t)},loadPage:function(t){return h.loadPage(t)},loadPageSync:function(t,e){return void 0===e&&(e={}),h.loadPageSync(t,e)},prefetch:function(t){return h.prefetch(t)},isPageNotFound:function(t){return h.isPageNotFound(t)},hovering:function(t){return h.hovering(t)},loadAppData:function(){return h.loadAppData()}},S=b;function P(){return h?h.staticQueryDb:{}}},5672:function(t,e,n){"use strict";var r=n(5491),o=n(2784),a=n(1625),i=n(9843),s=function(t){function e(){return t.apply(this,arguments)||this}return(0,r.Z)(e,t),e.prototype.render=function(){var t=Object.assign({},this.props,{params:Object.assign({},(0,i.GA)(this.props.location.pathname),this.props.pageResources.json.pageContext.__params)}),e=(0,o.createElement)(this.props.pageResources.component,Object.assign({},t,{key:this.props.path||this.props.pageResources.page.path}));return(0,a.h)("wrapPageElement",{element:e,props:t},e,(function(e){return{element:e.result,props:t}})).pop()},e}(o.Component);e.Z=s},7084:function(t,e,n){"use strict";var r=n(7560),o=n(5491),a=n(1625),i=n(2784),s=n(8316),u=n(1387),c=n(2802),l=n(9154),f=n.n(l),p=n(8447),d=n(77),h=n(2407),v=n(9831),m={id:"gatsby-announcer",style:{position:"absolute",top:0,width:1,height:1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},"aria-live":"assertive","aria-atomic":"true"},g=n(38),y=n(6739),w=n(8832);function b(t){var e=(0,h.J)(t);return null!=e&&(window.___replace(e.toPath),!0)}var S=function(t,e){b(t.pathname)||(0,a.h)("onPreRouteUpdate",{location:t,prevLocation:e})},P=function(t,e){b(t.pathname)||(0,a.h)("onRouteUpdate",{location:t,prevLocation:e})},k=function(t,e){if(void 0===e&&(e={}),"number"!=typeof t){var n=(0,y.cP)(t).pathname,r=(0,h.J)(n);if(r&&(t=r.toPath,n=(0,y.cP)(t).pathname),window.___swUpdated)window.location=n;else{var o=setTimeout((function(){v.Z.emit("onDelayedLoadPageResources",{pathname:n}),(0,a.h)("onRouteUpdateDelayed",{location:window.location})}),1e3);d.ZP.loadPage(n).then((function(r){if(!r||r.status===d.uQ.Error)return window.history.replaceState({},"",location.href),window.location=n,void clearTimeout(o);r&&r.page.webpackCompilationHash!==window.___webpackCompilationHash&&("serviceWorker"in navigator&&null!==navigator.serviceWorker.controller&&"activated"===navigator.serviceWorker.controller.state&&navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"}),window.location=n),(0,u.navigate)(t,e),clearTimeout(o)}))}}else g.V5.navigate(t)};function C(t,e){var n=this,r=e.location,o=r.pathname,i=r.hash,s=(0,a.h)("shouldUpdateScroll",{prevRouterProps:t,pathname:o,routerProps:{location:r},getSavedScrollPosition:function(t){return[0,n._stateStorage.read(t,t.key)]}});if(s.length>0)return s[s.length-1];if(t&&t.location.pathname===o)return i?decodeURI(i.slice(1)):[0,0];return!0}var x=function(t){function e(e){var n;return(n=t.call(this,e)||this).announcementRef=i.createRef(),n}(0,o.Z)(e,t);var n=e.prototype;return n.componentDidUpdate=function(t,e){var n=this;requestAnimationFrame((function(){var t="new page at "+n.props.location.pathname;document.title&&(t=document.title);var e=document.querySelectorAll("#gatsby-focus-wrapper h1");e&&e.length&&(t=e[0].textContent);var r="Navigated to "+t;n.announcementRef.current&&(n.announcementRef.current.innerText!==r&&(n.announcementRef.current.innerText=r))}))},n.render=function(){return(0,w.tZ)("div",(0,r.Z)({},m,{ref:this.announcementRef}))},e}(i.Component),E=function(t,e){var n,r;return t.href!==e.href||(null==t||null===(n=t.state)||void 0===n?void 0:n.key)!==(null==e||null===(r=e.state)||void 0===r?void 0:r.key)},_=function(t){function e(e){var n;return n=t.call(this,e)||this,S(e.location,null),n}(0,o.Z)(e,t);var n=e.prototype;return n.componentDidMount=function(){P(this.props.location,null)},n.shouldComponentUpdate=function(t){return!!E(t.location,this.props.location)&&(S(this.props.location,t.location),!0)},n.componentDidUpdate=function(t){E(t.location,this.props.location)&&P(this.props.location,t.location)},n.render=function(){return(0,w.tZ)(i.Fragment,null,this.props.children,(0,w.tZ)(x,{location:location}))},e}(i.Component),R=n(5672),O=n(3857);function j(t,e){for(var n in t)if(!(n in e))return!0;for(var r in e)if(t[r]!==e[r])return!0;return!1}var L=function(t){function e(e){var n;n=t.call(this)||this;var r=e.location,o=e.pageResources;return n.state={location:Object.assign({},r),pageResources:o||d.ZP.loadPageSync(r.pathname,{withErrorDetails:!0})},n}(0,o.Z)(e,t),e.getDerivedStateFromProps=function(t,e){var n=t.location;return e.location.href!==n.href?{pageResources:d.ZP.loadPageSync(n.pathname,{withErrorDetails:!0}),location:Object.assign({},n)}:{location:Object.assign({},n)}};var n=e.prototype;return n.loadResources=function(t){var e=this;d.ZP.loadPage(t).then((function(n){n&&n.status!==d.uQ.Error?e.setState({location:Object.assign({},window.location),pageResources:n}):(window.history.replaceState({},"",location.href),window.location=t)}))},n.shouldComponentUpdate=function(t,e){return e.pageResources?this.state.pageResources!==e.pageResources||(this.state.pageResources.component!==e.pageResources.component||(this.state.pageResources.json!==e.pageResources.json||(!(this.state.location.key===e.location.key||!e.pageResources.page||!e.pageResources.page.matchPath&&!e.pageResources.page.path)||function(t,e,n){return j(t.props,e)||j(t.state,n)}(this,t,e)))):(this.loadResources(t.location.pathname),!1)},n.render=function(){return this.props.children(this.state)},e}(i.Component),A=n(7272),D=new d.kL(O,[]);(0,d.N1)(D),D.setApiRunner(a.h),window.asyncRequires=O,window.___emitter=v.Z,window.___loader=d.jN,g.V5.listen((function(t){t.location.action=t.action})),window.___push=function(t){return k(t,{replace:!1})},window.___replace=function(t){return k(t,{replace:!0})},window.___navigate=function(t,e){return k(t,e)},b(window.location.pathname),(0,a.I)("onClientEntry").then((function(){(0,a.h)("registerServiceWorker").filter(Boolean).length>0&&n(1412);var t=function(t){return(0,w.tZ)(u.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},(0,w.tZ)(R.Z,t))},e=i.createContext({}),l=function(t){function n(){return t.apply(this,arguments)||this}return(0,o.Z)(n,t),n.prototype.render=function(){var t=this.props.children;return(0,w.tZ)(u.Location,null,(function(n){var r=n.location;return(0,w.tZ)(L,{location:r},(function(n){var r=n.pageResources,o=n.location,a=(0,d.hs)();return(0,w.tZ)(p.StaticQueryContext.Provider,{value:a},(0,w.tZ)(e.Provider,{value:{pageResources:r,location:o}},t))}))}))},n}(i.Component),h=function(n){function a(){return n.apply(this,arguments)||this}return(0,o.Z)(a,n),a.prototype.render=function(){var n=this;return(0,w.tZ)(e.Consumer,null,(function(e){var o=e.pageResources,a=e.location;return(0,w.tZ)(_,{location:a},(0,w.tZ)(c.$C,{location:a,shouldUpdateScroll:C},(0,w.tZ)(u.Router,{basepath:"",location:a,id:"gatsby-focus-wrapper"},(0,w.tZ)(t,(0,r.Z)({path:"/404.html"===o.page.path?(0,A.Z)(a.pathname,""):encodeURI(o.page.matchPath||o.page.path)},n.props,{location:a,pageResources:o},o.json)))))}))},a}(i.Component),v=window,m=v.pagePath,g=v.location;m&&""+m!==g.pathname&&!(D.findMatchPath((0,A.Z)(g.pathname,""))||"/404.html"===m||m.match(/^\/404\/?$/)||m.match(/^\/offline-plugin-app-shell-fallback\/?$/))&&(0,u.navigate)(""+m+g.search+g.hash,{replace:!0}),d.jN.loadPage(g.pathname).then((function(t){if(!t||t.status===d.uQ.Error){var e="page resources for "+g.pathname+" not found. Not rendering React";if(t&&t.error)throw console.error(e),t.error;throw new Error(e)}window.___webpackCompilationHash=t.page.webpackCompilationHash;var n=(0,a.h)("wrapRootElement",{element:(0,w.tZ)(h,null)},(0,w.tZ)(h,null),(function(t){return{element:t.result}})).pop(),r=function(){var t=i.useRef(!1);return i.useEffect((function(){t.current||(t.current=!0,performance.mark("onInitialClientRender"),(0,a.h)("onInitialClientRender"))}),[]),(0,w.tZ)(l,null,n)},o=(0,a.h)("replaceHydrateFunction",void 0,{}.GATSBY_EXPERIMENTAL_CONCURRENT_FEATURES?s.unstable_createRoot:s.hydrate)[0];f()((function(){var t="undefined"!=typeof window?document.getElementById("___gatsby"):null;o===s.unstable_createRoot?o(t,{hydrate:!0}).render((0,w.tZ)(r,null)):o((0,w.tZ)(r,null),t)}))}))}))},5910:function(t,e,n){"use strict";n.r(e);var r=n(2784),o=n(77),a=n(5672);e.default=function(t){var e=t.location,n=o.ZP.loadPageSync(e.pathname);return n?r.createElement(a.Z,Object.assign({location:e,pageResources:n},n.json)):null}},1553:function(t,e,n){var r;t.exports=(r=n(5910))&&r.default||r},9750:function(t,e){e.O=function(t){return t}},2407:function(t,e,n){"use strict";n.d(e,{J:function(){return a}});var r=new Map,o=new Map;function a(t){var e=r.get(t);return e||(e=o.get(t.toLowerCase())),e}[].forEach((function(t){t.ignoreCase?o.set(t.fromPath,t):r.set(t.fromPath,t)}))},1412:function(t,e,n){"use strict";n.r(e);var r=n(1625);"https:"!==window.location.protocol&&"localhost"!==window.location.hostname?console.error("Service workers can only be used over HTTPS, or on localhost for development"):"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then((function(t){t.addEventListener("updatefound",(function(){(0,r.h)("onServiceWorkerUpdateFound",{serviceWorker:t});var e=t.installing;console.log("installingWorker",e),e.addEventListener("statechange",(function(){switch(e.state){case"installed":navigator.serviceWorker.controller?(window.___swUpdated=!0,(0,r.h)("onServiceWorkerUpdateReady",{serviceWorker:t}),window.___failedResources&&(console.log("resources failed, SW updated - reloading"),window.location.reload())):(console.log("Content is now available offline!"),(0,r.h)("onServiceWorkerInstalled",{serviceWorker:t}));break;case"redundant":console.error("The installing service worker became redundant."),(0,r.h)("onServiceWorkerRedundant",{serviceWorker:t});break;case"activated":(0,r.h)("onServiceWorkerActive",{serviceWorker:t})}}))}))})).catch((function(t){console.error("Error during service worker registration:",t)}))},7272:function(t,e,n){"use strict";function r(t,e){return void 0===e&&(e=""),e?t===e?"/":t.startsWith(e+"/")?t.slice(e.length):t:t}n.d(e,{Z:function(){return r}})},7630:function(t,e,n){"use strict";n.r(e),n.d(e,{onClientEntry:function(){return r}});var r=function(){window.onload=function(){var t,e;t="https://stackpile.io/stack_162299.js",(e=document.createElement("script")).src=t,e.async=!0,document.head.appendChild(e)}}},1387:function(t,e,n){"use strict";n.r(e),n.d(e,{BaseContext:function(){return $},Link:function(){return Q},Location:function(){return T},LocationProvider:function(){return M},Match:function(){return X},Redirect:function(){return Y},Router:function(){return Z},ServerLocation:function(){return N},createHistory:function(){return P},createMemorySource:function(){return k},globalHistory:function(){return x},isRedirect:function(){return B},matchPath:function(){return c},navigate:function(){return E},redirectTo:function(){return K},useLocation:function(){return tt},useMatch:function(){return rt},useNavigate:function(){return et},useParams:function(){return nt}});var r=n(2784),o=n(7677),a=n.n(o),i=n(9750),s=function(t,e){return t.substr(0,e.length)===e},u=function(t,e){for(var n=void 0,r=void 0,o=e.split("?")[0],i=g(o),s=""===i[0],u=m(t),c=0,l=u.length;ce.score?-1:t.index-e.index}))},g=function(t){return t.replace(/(^\/+|\/+$)/g,"").split("/")},y=function(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0})))&&n.length>0?"?"+n.join("&"):"")},w=["uri","path"],b=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},s=i.state,u=i.replace,c=void 0!==u&&u;if("number"==typeof e)t.history.go(e);else{s=b({},s,{key:Date.now()+""});try{o||c?t.history.replaceState(s,null,e):t.history.pushState(s,null,e)}catch(f){t.location[c?"replace":"assign"](e)}}r=S(t),o=!0;var l=new Promise((function(t){return a=t}));return n.forEach((function(t){return t({location:r,action:"PUSH"})})),l}}},k=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",e=t.indexOf("?"),n={pathname:e>-1?t.substr(0,e):t,search:e>-1?t.substr(e):""},r=0,o=[n],a=[null];return{get location(){return o[r]},addEventListener:function(t,e){},removeEventListener:function(t,e){},history:{get entries(){return o},get index(){return r},get state(){return a[r]},pushState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;r++,o.push({pathname:s,search:c.length?"?"+c:c}),a.push(t)},replaceState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;o[r]={pathname:s,search:c},a[r]=t},go:function(t){var e=r+t;e<0||e>a.length-1||(r=e)}}}},C=!("undefined"==typeof window||!window.document||!window.document.createElement),x=P(C?window:k()),E=x.navigate,_=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function O(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function j(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function L(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var A=function(t,e){var n=(0,r.createContext)(e);return n.displayName=t,n},D=A("Location"),T=function(t){var e=t.children;return r.createElement(D.Consumer,null,(function(t){return t?e(t):r.createElement(M,null,e)}))},M=function(t){function e(){var n,r;O(this,e);for(var o=arguments.length,a=Array(o),i=0;i-1?(a=e.substring(0,o),i=e.substring(o)):a=e,r.createElement(D.Provider,{value:{location:{pathname:a,search:i,hash:""},navigate:function(){throw new Error("You can't call navigate on the server.")}}},n)},$=A("Base",{baseuri:"/",basepath:"/",navigate:x.navigate}),Z=function(t){return r.createElement($.Consumer,null,(function(e){return r.createElement(T,null,(function(n){return r.createElement(U,_({},e,n,t))}))}))},U=function(t){function e(){return O(this,e),j(this,t.apply(this,arguments))}return L(e,t),e.prototype.render=function(){var t=this.props,e=t.location,n=t.navigate,o=t.basepath,a=t.primary,i=t.children,s=(t.baseuri,t.component),c=void 0===s?"div":s,f=R(t,["location","navigate","basepath","primary","children","baseuri","component"]),p=r.Children.toArray(i).reduce((function(t,e){var n=at(o)(e);return t.concat(n)}),[]),d=e.pathname,h=u(p,d);if(h){var v=h.params,m=h.uri,g=h.route,y=h.route.value;o=g.default?o:g.path.replace(/\*$/,"");var w=_({},v,{uri:m,location:e,navigate:function(t,e){return n(l(t,m),e)}}),b=r.cloneElement(y,w,y.props.children?r.createElement(Z,{location:e,primary:a},y.props.children):void 0),S=a?F:c,P=a?_({uri:m,location:e,component:c},f):f;return r.createElement($.Provider,{value:{baseuri:m,basepath:o,navigate:w.navigate}},r.createElement(S,P,b))}return null},e}(r.PureComponent);U.defaultProps={primary:!0};var I=A("Focus"),F=function(t){var e=t.uri,n=t.location,o=t.component,a=R(t,["uri","location","component"]);return r.createElement(I.Consumer,null,(function(t){return r.createElement(H,_({},a,{component:o,requestFocus:t,uri:e,location:n}))}))},W=!0,q=0,H=function(t){function e(){var n,r;O(this,e);for(var o=arguments.length,a=Array(o),i=0;i arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n * ie10 fix - Mikael Kristiansson 2019\n */\n!(function(name, definition) {\n if (typeof module != \"undefined\") module.exports = definition();\n else if (typeof define == \"function\" && typeof define.amd == \"object\")\n define(definition);\n else this[name] = definition();\n})(\"domready\", function() {\n var ie10 = false;\n if (navigator.appVersion.indexOf(\"MSIE 10\") !== -1) {\n ie10 = true;\n }\n\n var fns = [],\n listener,\n doc = typeof document === \"object\" && document,\n hack = ie10\n ? doc.documentElement.doScroll(\"left\")\n : doc.documentElement.doScroll,\n domContentLoaded = \"DOMContentLoaded\",\n loaded =\n doc && (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState);\n\n if (!loaded && doc)\n doc.addEventListener(\n domContentLoaded,\n (listener = function() {\n doc.removeEventListener(domContentLoaded, listener);\n loaded = 1;\n while ((listener = fns.shift())) listener();\n })\n );\n\n return function(fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn);\n };\n});\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs;\n/**\n * @param {number}\n * @return {string}\n */\n\nexport var from = String.fromCharCode;\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\n\nexport function hash(value, length) {\n return (((length << 2 ^ charat(value, 0)) << 2 ^ charat(value, 1)) << 2 ^ charat(value, 2)) << 2 ^ charat(value, 3);\n}\n/**\n * @param {string} value\n * @return {string}\n */\n\nexport function trim(value) {\n return value.trim();\n}\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\n\nexport function match(value, pattern) {\n return (value = pattern.exec(value)) ? value[0] : value;\n}\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\n\nexport function replace(value, pattern, replacement) {\n return value.replace(pattern, replacement);\n}\n/**\n * @param {string} value\n * @param {string} value\n * @return {number}\n */\n\nexport function indexof(value, search) {\n return value.indexOf(search);\n}\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\n\nexport function charat(value, index) {\n return value.charCodeAt(index) | 0;\n}\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\n\nexport function substr(value, begin, end) {\n return value.slice(begin, end);\n}\n/**\n * @param {string} value\n * @return {number}\n */\n\nexport function strlen(value) {\n return value.length;\n}\n/**\n * @param {any[]} value\n * @return {number}\n */\n\nexport function sizeof(value) {\n return value.length;\n}\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\n\nexport function append(value, array) {\n return array.push(value), value;\n}\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\n\nexport function combine(array, callback) {\n return array.map(callback).join('');\n}","import { from, trim, charat, strlen, substr, append } from './Utility.js';\nexport var line = 1;\nexport var column = 1;\nexport var length = 0;\nexport var position = 0;\nexport var character = 0;\nexport var characters = '';\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string} type\n * @param {string[]} props\n * @param {object[]} children\n * @param {number} length\n */\n\nexport function node(value, root, parent, type, props, children, length) {\n return {\n value: value,\n root: root,\n parent: parent,\n type: type,\n props: props,\n children: children,\n line: line,\n column: column,\n length: length,\n return: ''\n };\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {string} type\n */\n\nexport function copy(value, root, type) {\n return node(value, root.root, root.parent, type, root.props, root.children, 0);\n}\n/**\n * @return {number}\n */\n\nexport function char() {\n return character;\n}\n/**\n * @return {number}\n */\n\nexport function prev() {\n character = position > 0 ? charat(characters, --position) : 0;\n if (column--, character === 10) column = 1, line--;\n return character;\n}\n/**\n * @return {number}\n */\n\nexport function next() {\n character = position < length ? charat(characters, position++) : 0;\n if (column++, character === 10) column = 1, line++;\n return character;\n}\n/**\n * @return {number}\n */\n\nexport function peek() {\n return charat(characters, position);\n}\n/**\n * @return {number}\n */\n\nexport function caret() {\n return position;\n}\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\n\nexport function slice(begin, end) {\n return substr(characters, begin, end);\n}\n/**\n * @param {number} type\n * @return {number}\n */\n\nexport function token(type) {\n switch (type) {\n // \\0 \\t \\n \\r \\s whitespace token\n case 0:\n case 9:\n case 10:\n case 13:\n case 32:\n return 5;\n // ! + , / > @ ~ isolate token\n\n case 33:\n case 43:\n case 44:\n case 47:\n case 62:\n case 64:\n case 126: // ; { } breakpoint token\n\n case 59:\n case 123:\n case 125:\n return 4;\n // : accompanied token\n\n case 58:\n return 3;\n // \" ' ( [ opening delimit token\n\n case 34:\n case 39:\n case 40:\n case 91:\n return 2;\n // ) ] closing delimit token\n\n case 41:\n case 93:\n return 1;\n }\n\n return 0;\n}\n/**\n * @param {string} value\n * @return {any[]}\n */\n\nexport function alloc(value) {\n return line = column = 1, length = strlen(characters = value), position = 0, [];\n}\n/**\n * @param {any} value\n * @return {any}\n */\n\nexport function dealloc(value) {\n return characters = '', value;\n}\n/**\n * @param {number} type\n * @return {string}\n */\n\nexport function delimit(type) {\n return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)));\n}\n/**\n * @param {string} value\n * @return {string[]}\n */\n\nexport function tokenize(value) {\n return dealloc(tokenizer(alloc(value)));\n}\n/**\n * @param {number} type\n * @return {string}\n */\n\nexport function whitespace(type) {\n while (character = peek()) {\n if (character < 33) next();else break;\n }\n\n return token(type) > 2 || token(character) > 3 ? '' : ' ';\n}\n/**\n * @param {string[]} children\n * @return {string[]}\n */\n\nexport function tokenizer(children) {\n while (next()) {\n switch (token(character)) {\n case 0:\n append(identifier(position - 1), children);\n break;\n\n case 2:\n append(delimit(character), children);\n break;\n\n default:\n append(from(character), children);\n }\n }\n\n return children;\n}\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\n\nexport function escaping(index, count) {\n while (--count && next()) {\n // not 0-9 A-F a-f\n if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break;\n }\n\n return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32));\n}\n/**\n * @param {number} type\n * @return {number}\n */\n\nexport function delimiter(type) {\n while (next()) {\n switch (character) {\n // ] ) \" '\n case type:\n return position;\n // \" '\n\n case 34:\n case 39:\n return delimiter(type === 34 || type === 39 ? type : character);\n // (\n\n case 40:\n if (type === 41) delimiter(type);\n break;\n // \\\n\n case 92:\n next();\n break;\n }\n }\n\n return position;\n}\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\n\nexport function commenter(type, index) {\n while (next()) {\n // //\n if (type + character === 47 + 10) break; // /*\n else if (type + character === 42 + 42 && peek() === 47) break;\n }\n\n return '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next());\n}\n/**\n * @param {number} index\n * @return {string}\n */\n\nexport function identifier(index) {\n while (!token(peek())) {\n next();\n }\n\n return slice(index, position);\n}","export var MS = '-ms-';\nexport var MOZ = '-moz-';\nexport var WEBKIT = '-webkit-';\nexport var COMMENT = 'comm';\nexport var RULESET = 'rule';\nexport var DECLARATION = 'decl';\nexport var PAGE = '@page';\nexport var MEDIA = '@media';\nexport var IMPORT = '@import';\nexport var CHARSET = '@charset';\nexport var VIEWPORT = '@viewport';\nexport var SUPPORTS = '@supports';\nexport var DOCUMENT = '@document';\nexport var NAMESPACE = '@namespace';\nexport var KEYFRAMES = '@keyframes';\nexport var FONT_FACE = '@font-face';\nexport var COUNTER_STYLE = '@counter-style';\nexport var FONT_FEATURE_VALUES = '@font-feature-values';","import { IMPORT, COMMENT, RULESET, DECLARATION } from './Enum.js';\nimport { strlen, sizeof } from './Utility.js';\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\n\nexport function serialize(children, callback) {\n var output = '';\n var length = sizeof(children);\n\n for (var i = 0; i < length; i++) {\n output += callback(children[i], i, children, callback) || '';\n }\n\n return output;\n}\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\n\nexport function stringify(element, index, children, callback) {\n switch (element.type) {\n case IMPORT:\n case DECLARATION:\n return element.return = element.return || element.value;\n\n case COMMENT:\n return '';\n\n case RULESET:\n element.value = element.props.join(',');\n }\n\n return strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : '';\n}","import { MS, MOZ, WEBKIT } from './Enum.js';\nimport { hash, charat, strlen, indexof, replace } from './Utility.js';\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\n\nexport function prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}","import { COMMENT, RULESET, DECLARATION } from './Enum.js';\nimport { abs, trim, from, sizeof, strlen, substr, append, replace } from './Utility.js';\nimport { node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter } from './Tokenizer.js';\n/**\n * @param {string} value\n * @return {object[]}\n */\n\nexport function compile(value) {\n return dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value));\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\n\nexport function parse(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n var index = 0;\n var offset = 0;\n var length = pseudo;\n var atrule = 0;\n var property = 0;\n var previous = 0;\n var variable = 1;\n var scanning = 1;\n var ampersand = 1;\n var character = 0;\n var type = '';\n var props = rules;\n var children = rulesets;\n var reference = rule;\n var characters = type;\n\n while (scanning) {\n switch (previous = character, character = next()) {\n // \" ' [ (\n case 34:\n case 39:\n case 91:\n case 40:\n characters += delimit(character);\n break;\n // \\t \\n \\r \\s\n\n case 9:\n case 10:\n case 13:\n case 32:\n characters += whitespace(previous);\n break;\n // \\\n\n case 92:\n characters += escaping(caret() - 1, 7);\n continue;\n // /\n\n case 47:\n switch (peek()) {\n case 42:\n case 47:\n append(comment(commenter(next(), caret()), root, parent), declarations);\n break;\n\n default:\n characters += '/';\n }\n\n break;\n // {\n\n case 123 * variable:\n points[index++] = strlen(characters) * ampersand;\n // } ; \\0\n\n case 125 * variable:\n case 59:\n case 0:\n switch (character) {\n // \\0 }\n case 0:\n case 125:\n scanning = 0;\n // ;\n\n case 59 + offset:\n if (property > 0 && strlen(characters) - length) append(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations);\n break;\n // @ ;\n\n case 59:\n characters += ';';\n // { rule/at-rule\n\n default:\n append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets);\n if (character === 123) if (offset === 0) parse(characters, root, reference, reference, props, rulesets, length, points, children);else switch (atrule) {\n // d m s\n case 100:\n case 109:\n case 115:\n parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children);\n break;\n\n default:\n parse(characters, reference, reference, reference, [''], children, length, points, children);\n }\n }\n\n index = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo;\n break;\n // :\n\n case 58:\n length = 1 + strlen(characters), property = previous;\n\n default:\n if (variable < 1) if (character == 123) --variable;else if (character == 125 && variable++ == 0 && prev() == 125) continue;\n\n switch (characters += from(character), character * variable) {\n // &\n case 38:\n ampersand = offset > 0 ? 1 : (characters += '\\f', -1);\n break;\n // ,\n\n case 44:\n points[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1;\n break;\n // @\n\n case 64:\n // -\n if (peek() === 45) characters += delimit(next());\n atrule = peek(), offset = strlen(type = characters += identifier(caret())), character++;\n break;\n // -\n\n case 45:\n if (previous === 45 && strlen(characters) == 2) variable = 0;\n }\n\n }\n }\n\n return rulesets;\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\n\nexport function ruleset(value, root, parent, index, offset, rules, points, type, props, children, length) {\n var post = offset - 1;\n var rule = offset === 0 ? rules : [''];\n var size = sizeof(rule);\n\n for (var i = 0, j = 0, k = 0; i < index; ++i) {\n for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x) {\n if (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x]))) props[k++] = z;\n }\n }\n\n return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length);\n}\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\n\nexport function comment(value, root, parent) {\n return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0);\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\n\nexport function declaration(value, root, parent, length) {\n return node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length);\n}","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, identifier, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifier(position - 1);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\n\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // .length indicates if this rule contains pseudo or not\n !element.length) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\n\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;","import { MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION } from './Enum.js';\nimport { match, charat, substr, strlen, sizeof, replace, combine } from './Utility.js';\nimport { copy, tokenize } from './Tokenizer.js';\nimport { serialize } from './Serializer.js';\nimport { prefix } from './Prefixer.js';\n/**\n * @param {function[]} collection\n * @return {function}\n */\n\nexport function middleware(collection) {\n var length = sizeof(collection);\n return function (element, index, children, callback) {\n var output = '';\n\n for (var i = 0; i < length; i++) {\n output += collection[i](element, index, children, callback) || '';\n }\n\n return output;\n };\n}\n/**\n * @param {function} callback\n * @return {function}\n */\n\nexport function rulesheet(callback) {\n return function (element) {\n if (!element.root) if (element = element.return) callback(element);\n };\n}\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\n\nexport function prefixer(element, index, children, callback) {\n if (!element.return) switch (element.type) {\n case DECLARATION:\n element.return = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(replace(element.value, '@', '@' + WEBKIT), element, '')], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(replace(value, /:(read-\\w+)/, ':' + MOZ + '$1'), element, '')], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1'), element, ''), copy(replace(value, /:(plac\\w+)/, ':' + MOZ + '$1'), element, ''), copy(replace(value, /:(plac\\w+)/, MS + 'input-$1'), element, '')], callback);\n }\n\n return '';\n });\n }\n}\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\n\nexport function namespace(element) {\n switch (element.type) {\n case RULESET:\n element.props = element.props.map(function (value) {\n return combine(tokenize(value), function (value, index, children) {\n switch (charat(value, 0)) {\n // \\f\n case 12:\n return substr(value, 1, strlen(value));\n // \\0 ( + > ~\n\n case 0:\n case 40:\n case 43:\n case 62:\n case 126:\n return value;\n // :\n\n case 58:\n if (children[++index] === 'global') children[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1);\n // \\s\n\n case 32:\n return index === 1 ? '' : value;\n\n default:\n switch (index) {\n case 0:\n element = value;\n return sizeof(children) > 1 ? '' : value;\n\n case index = sizeof(children) - 1:\n case 2:\n return index === 2 ? value + element + element : value + element;\n\n default:\n return value;\n }\n\n }\n });\n });\n }\n}","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;","import { createContext, forwardRef, useContext, createElement } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\nvar CacheProvider = EmotionCacheContext.Provider;\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\n\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\n\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n} // thus we only need to replace what is a valid character for JS, but not for CSS\n\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\n\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type;\n\n if (process.env.NODE_ENV !== 'production') {\n var error = new Error();\n\n if (error.stack) {\n // chrome\n var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z0-9$]+) /);\n\n if (!match) {\n // safari and firefox\n match = error.stack.match(/.*\\n([A-Z][A-Za-z0-9$]+)@/);\n }\n\n if (match) {\n newProps[labelPropName] = sanitizeIdentifier(match[1]);\n }\n }\n }\n\n return newProps;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, typeof cssProp === 'function' || Array.isArray(cssProp) ? useContext(ThemeContext) : undefined);\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n return ele;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };","import { createElement, useContext, useRef, useLayoutEffect } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-a8309070.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-a8309070.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport 'hoist-non-react-statics';\nimport '../isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nvar pkg = {\n name: \"@emotion/react\",\n version: \"11.4.0\",\n main: \"dist/emotion-react.cjs.js\",\n module: \"dist/emotion-react.esm.js\",\n browser: {\n \"./dist/emotion-react.cjs.js\": \"./dist/emotion-react.browser.cjs.js\",\n \"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n },\n types: \"types/index.d.ts\",\n files: [\"src\", \"dist\", \"jsx-runtime\", \"jsx-dev-runtime\", \"isolated-hoist-non-react-statics-do-not-use-this-in-your-code\", \"types/*.d.ts\", \"macro.js\", \"macro.d.ts\", \"macro.js.flow\"],\n sideEffects: false,\n author: \"mitchellhamilton \",\n license: \"MIT\",\n scripts: {\n \"test:typescript\": \"dtslint types\"\n },\n dependencies: {\n \"@babel/runtime\": \"^7.13.10\",\n \"@emotion/cache\": \"^11.4.0\",\n \"@emotion/serialize\": \"^1.0.2\",\n \"@emotion/sheet\": \"^1.0.1\",\n \"@emotion/utils\": \"^1.0.0\",\n \"@emotion/weak-memoize\": \"^0.2.5\",\n \"hoist-non-react-statics\": \"^3.3.1\"\n },\n peerDependencies: {\n \"@babel/core\": \"^7.0.0\",\n react: \">=16.8.0\"\n },\n peerDependenciesMeta: {\n \"@babel/core\": {\n optional: true\n },\n \"@types/react\": {\n optional: true\n }\n },\n devDependencies: {\n \"@babel/core\": \"^7.13.10\",\n \"@emotion/css\": \"11.1.3\",\n \"@emotion/css-prettifier\": \"1.0.0\",\n \"@emotion/server\": \"11.4.0\",\n \"@emotion/styled\": \"11.3.0\",\n \"@types/react\": \"^16.9.11\",\n dtslint: \"^0.3.0\",\n \"html-tag-names\": \"^1.1.2\",\n react: \"16.14.0\",\n \"svg-tag-names\": \"^1.1.1\"\n },\n repository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n publishConfig: {\n access: \"public\"\n },\n \"umd:main\": \"dist/emotion-react.umd.min.js\",\n preconstruct: {\n entrypoints: [\"./index.js\", \"./jsx-runtime.js\", \"./jsx-dev-runtime.js\", \"./isolated-hoist-non-react-statics-do-not-use-this-in-your-code.js\"],\n umdName: \"emotionReact\"\n }\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, typeof styles === 'function' || Array.isArray(styles) ? useContext(ThemeContext) : undefined); // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n var sheetRef = useRef();\n useLayoutEffect(function () {\n var key = cache.key + \"-global\";\n var sheet = new StyleSheet({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false; // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useLayoutEffect(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.');\n }\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n {\n insertStyles(cache, serialized, false);\n }\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return ele;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var isBrowser = \"object\" !== 'undefined'; // #1727 for some reason Jest evaluates modules twice if some consuming module gets mocked with jest.mock\n\n var isJest = typeof jest !== 'undefined';\n\n if (isBrowser && !isJest) {\n var globalContext = isBrowser ? window : global;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\nexport default unitlessKeys;","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\n\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n before = _this.prepend ? _this.container.firstChild : _this.before;\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-ms-input-placeholder|-moz-read-write|-moz-read-only){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };","var isBrowser = \"object\" !== 'undefined';\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\n\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.globalHistory = globalHistory;\nexports.navigate = navigate;\nexports.createHistory = createHistory;\nexports.createMemorySource = createMemorySource;","\"use strict\";\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = require(\"invariant\");\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? (0, _invariant2.default)(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;","'use strict';\n\nvar preserveCamelCase = function preserveCamelCase(string) {\n var isLastCharLower = false;\n var isLastCharUpper = false;\n var isLastLastCharUpper = false;\n\n for (var i = 0; i < string.length; i++) {\n var character = string[i];\n\n if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n string = string.slice(0, i) + '-' + string.slice(i);\n isLastCharLower = false;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = true;\n i++;\n } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n string = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = false;\n isLastCharLower = true;\n } else {\n isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n }\n }\n\n return string;\n};\n\nvar camelCase = function camelCase(input, options) {\n if (!(typeof input === 'string' || Array.isArray(input))) {\n throw new TypeError('Expected the input to be `string | string[]`');\n }\n\n options = Object.assign({\n pascalCase: false\n }, options);\n\n var postProcess = function postProcess(x) {\n return options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\n };\n\n if (Array.isArray(input)) {\n input = input.map(function (x) {\n return x.trim();\n }).filter(function (x) {\n return x.length;\n }).join('-');\n } else {\n input = input.trim();\n }\n\n if (input.length === 0) {\n return '';\n }\n\n if (input.length === 1) {\n return options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n }\n\n var hasUpperCase = input !== input.toLowerCase();\n\n if (hasUpperCase) {\n input = preserveCamelCase(input);\n }\n\n input = input.replace(/^[_.\\- ]+/, '').toLowerCase().replace(/[_.\\- ]+(\\w|$)/g, function (_, p1) {\n return p1.toUpperCase();\n }).replace(/\\d+(\\w|$)/g, function (m) {\n return m.toUpperCase();\n });\n return postProcess(input);\n};\n\nmodule.exports = camelCase; // TODO: Remove this for the next major release\n\nmodule.exports.default = camelCase;","var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _templateObject = _taggedTemplateLiteral(['', ''], ['', '']);\n\nfunction _taggedTemplateLiteral(strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n/**\n * @class TemplateTag\n * @classdesc Consumes a pipeline of composable transformer plugins and produces a template tag.\n */\n\n\nvar TemplateTag = function () {\n /**\n * constructs a template tag\n * @constructs TemplateTag\n * @param {...Object} [...transformers] - an array or arguments list of transformers\n * @return {Function} - a template tag\n */\n function TemplateTag() {\n var _this = this;\n\n for (var _len = arguments.length, transformers = Array(_len), _key = 0; _key < _len; _key++) {\n transformers[_key] = arguments[_key];\n }\n\n _classCallCheck(this, TemplateTag);\n\n this.tag = function (strings) {\n for (var _len2 = arguments.length, expressions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n expressions[_key2 - 1] = arguments[_key2];\n }\n\n if (typeof strings === 'function') {\n // if the first argument passed is a function, assume it is a template tag and return\n // an intermediary tag that processes the template using the aforementioned tag, passing the\n // result to our tag\n return _this.interimTag.bind(_this, strings);\n }\n\n if (typeof strings === 'string') {\n // if the first argument passed is a string, just transform it\n return _this.transformEndResult(strings);\n } // else, return a transformed end result of processing the template with our tag\n\n\n strings = strings.map(_this.transformString.bind(_this));\n return _this.transformEndResult(strings.reduce(_this.processSubstitutions.bind(_this, expressions)));\n }; // if first argument is an array, extrude it as a list of transformers\n\n\n if (transformers.length > 0 && Array.isArray(transformers[0])) {\n transformers = transformers[0];\n } // if any transformers are functions, this means they are not initiated - automatically initiate them\n\n\n this.transformers = transformers.map(function (transformer) {\n return typeof transformer === 'function' ? transformer() : transformer;\n }); // return an ES2015 template tag\n\n return this.tag;\n }\n /**\n * Applies all transformers to a template literal tagged with this method.\n * If a function is passed as the first argument, assumes the function is a template tag\n * and applies it to the template, returning a template tag.\n * @param {(Function|String|Array)} strings - Either a template tag or an array containing template strings separated by identifier\n * @param {...*} ...expressions - Optional list of substitution values.\n * @return {(String|Function)} - Either an intermediary tag function or the results of processing the template.\n */\n\n\n _createClass(TemplateTag, [{\n key: 'interimTag',\n\n /**\n * An intermediary template tag that receives a template tag and passes the result of calling the template with the received\n * template tag to our own template tag.\n * @param {Function} nextTag - the received template tag\n * @param {Array} template - the template to process\n * @param {...*} ...substitutions - `substitutions` is an array of all substitutions in the template\n * @return {*} - the final processed value\n */\n value: function interimTag(previousTag, template) {\n for (var _len3 = arguments.length, substitutions = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n substitutions[_key3 - 2] = arguments[_key3];\n }\n\n return this.tag(_templateObject, previousTag.apply(undefined, [template].concat(substitutions)));\n }\n /**\n * Performs bulk processing on the tagged template, transforming each substitution and then\n * concatenating the resulting values into a string.\n * @param {Array<*>} substitutions - an array of all remaining substitutions present in this template\n * @param {String} resultSoFar - this iteration's result string so far\n * @param {String} remainingPart - the template chunk after the current substitution\n * @return {String} - the result of joining this iteration's processed substitution with the result\n */\n\n }, {\n key: 'processSubstitutions',\n value: function processSubstitutions(substitutions, resultSoFar, remainingPart) {\n var substitution = this.transformSubstitution(substitutions.shift(), resultSoFar);\n return ''.concat(resultSoFar, substitution, remainingPart);\n }\n /**\n * Iterate through each transformer, applying the transformer's `onString` method to the template\n * strings before all substitutions are processed.\n * @param {String} str - The input string\n * @return {String} - The final results of processing each transformer\n */\n\n }, {\n key: 'transformString',\n value: function transformString(str) {\n var cb = function cb(res, transform) {\n return transform.onString ? transform.onString(res) : res;\n };\n\n return this.transformers.reduce(cb, str);\n }\n /**\n * When a substitution is encountered, iterates through each transformer and applies the transformer's\n * `onSubstitution` method to the substitution.\n * @param {*} substitution - The current substitution\n * @param {String} resultSoFar - The result up to and excluding this substitution.\n * @return {*} - The final result of applying all substitution transformations.\n */\n\n }, {\n key: 'transformSubstitution',\n value: function transformSubstitution(substitution, resultSoFar) {\n var cb = function cb(res, transform) {\n return transform.onSubstitution ? transform.onSubstitution(res, resultSoFar) : res;\n };\n\n return this.transformers.reduce(cb, substitution);\n }\n /**\n * Iterates through each transformer, applying the transformer's `onEndResult` method to the\n * template literal after all substitutions have finished processing.\n * @param {String} endResult - The processed template, just before it is returned from the tag\n * @return {String} - The final results of processing each transformer\n */\n\n }, {\n key: 'transformEndResult',\n value: function transformEndResult(endResult) {\n var cb = function cb(res, transform) {\n return transform.onEndResult ? transform.onEndResult(res) : res;\n };\n\n return this.transformers.reduce(cb, endResult);\n }\n }]);\n\n return TemplateTag;\n}();\n\nexport default TemplateTag;","var defaults = {\n separator: '',\n conjunction: '',\n serial: false\n};\n/**\n * Converts an array substitution to a string containing a list\n * @param {String} [opts.separator = ''] - the character that separates each item\n * @param {String} [opts.conjunction = ''] - replace the last separator with this\n * @param {Boolean} [opts.serial = false] - include the separator before the conjunction? (Oxford comma use-case)\n *\n * @return {Object} - a TemplateTag transformer\n */\n\nvar inlineArrayTransformer = function inlineArrayTransformer() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaults;\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n // only operate on arrays\n if (Array.isArray(substitution)) {\n var arrayLength = substitution.length;\n var separator = opts.separator;\n var conjunction = opts.conjunction;\n var serial = opts.serial; // join each item in the array into a string where each item is separated by separator\n // be sure to maintain indentation\n\n var indent = resultSoFar.match(/(\\n?[^\\S\\n]+)$/);\n\n if (indent) {\n substitution = substitution.join(separator + indent[1]);\n } else {\n substitution = substitution.join(separator + ' ');\n } // if conjunction is set, replace the last separator with conjunction, but only if there is more than one substitution\n\n\n if (conjunction && arrayLength > 1) {\n var separatorIndex = substitution.lastIndexOf(separator);\n substitution = substitution.slice(0, separatorIndex) + (serial ? separator : '') + ' ' + conjunction + substitution.slice(separatorIndex + 1);\n }\n }\n\n return substitution;\n }\n };\n};\n\nexport default inlineArrayTransformer;","function _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\n/**\n * strips indentation from a template literal\n * @param {String} type = 'initial' - whether to remove all indentation or just leading indentation. can be 'all' or 'initial'\n * @return {Object} - a TemplateTag transformer\n */\n\n\nvar stripIndentTransformer = function stripIndentTransformer() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'initial';\n return {\n onEndResult: function onEndResult(endResult) {\n if (type === 'initial') {\n // remove the shortest leading indentation from each line\n var match = endResult.match(/^[^\\S\\n]*(?=\\S)/gm);\n var indent = match && Math.min.apply(Math, _toConsumableArray(match.map(function (el) {\n return el.length;\n })));\n\n if (indent) {\n var regexp = new RegExp('^.{' + indent + '}', 'gm');\n return endResult.replace(regexp, '');\n }\n\n return endResult;\n }\n\n if (type === 'all') {\n // remove all indentation from each line\n return endResult.replace(/^[^\\S\\n]+/gm, '');\n }\n\n throw new Error('Unknown type: ' + type);\n }\n };\n};\n\nexport default stripIndentTransformer;","/**\n * TemplateTag transformer that trims whitespace on the end result of a tagged template\n * @param {String} side = '' - The side of the string to trim. Can be 'start' or 'end' (alternatively 'left' or 'right')\n * @return {Object} - a TemplateTag transformer\n */\nvar trimResultTransformer = function trimResultTransformer() {\n var side = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return {\n onEndResult: function onEndResult(endResult) {\n if (side === '') {\n return endResult.trim();\n }\n\n side = side.toLowerCase();\n\n if (side === 'start' || side === 'left') {\n return endResult.replace(/^\\s*/, '');\n }\n\n if (side === 'end' || side === 'right') {\n return endResult.replace(/\\s*$/, '');\n }\n\n throw new Error('Side not supported: ' + side);\n }\n };\n};\n\nexport default trimResultTransformer;","var splitStringTransformer = function splitStringTransformer(splitBy) {\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n if (splitBy != null && typeof splitBy === 'string') {\n if (typeof substitution === 'string' && substitution.includes(splitBy)) {\n substitution = substitution.split(splitBy);\n }\n } else {\n throw new Error('You need to specify a string character to split by.');\n }\n\n return substitution;\n }\n };\n};\n\nexport default splitStringTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaLists = new TemplateTag(inlineArrayTransformer({\n separator: ','\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaLists;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaListsAnd = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'and'\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaListsAnd;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaListsOr = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'or'\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaListsOr;","var isValidValue = function isValidValue(x) {\n return x != null && !Number.isNaN(x) && typeof x !== 'boolean';\n};\n\nvar removeNonPrintingValuesTransformer = function removeNonPrintingValuesTransformer() {\n return {\n onSubstitution: function onSubstitution(substitution) {\n if (Array.isArray(substitution)) {\n return substitution.filter(isValidValue);\n }\n\n if (isValidValue(substitution)) {\n return substitution;\n }\n\n return '';\n }\n };\n};\n\nexport default removeNonPrintingValuesTransformer;","var replaceSubstitutionTransformer = function replaceSubstitutionTransformer(replaceWhat, replaceWith) {\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n if (replaceWhat == null || replaceWith == null) {\n throw new Error('replaceSubstitutionTransformer requires at least 2 arguments.');\n } // Do not touch if null or undefined\n\n\n if (substitution == null) {\n return substitution;\n } else {\n return substitution.toString().replace(replaceWhat, replaceWith);\n }\n }\n };\n};\n\nexport default replaceSubstitutionTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport splitStringTransformer from '../splitStringTransformer';\nimport removeNonPrintingValuesTransformer from '../removeNonPrintingValuesTransformer';\nvar html = new TemplateTag(splitStringTransformer('\\n'), removeNonPrintingValuesTransformer, inlineArrayTransformer, stripIndentTransformer, trimResultTransformer);\nexport default html;","/**\n * Replaces tabs, newlines and spaces with the chosen value when they occur in sequences\n * @param {(String|RegExp)} replaceWhat - the value or pattern that should be replaced\n * @param {*} replaceWith - the replacement value\n * @return {Object} - a TemplateTag transformer\n */\nvar replaceResultTransformer = function replaceResultTransformer(replaceWhat, replaceWith) {\n return {\n onEndResult: function onEndResult(endResult) {\n if (replaceWhat == null || replaceWith == null) {\n throw new Error('replaceResultTransformer requires at least 2 arguments.');\n }\n\n return endResult.replace(replaceWhat, replaceWith);\n }\n };\n};\n\nexport default replaceResultTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport splitStringTransformer from '../splitStringTransformer';\nimport replaceSubstitutionTransformer from '../replaceSubstitutionTransformer';\nvar safeHtml = new TemplateTag(splitStringTransformer('\\n'), inlineArrayTransformer, stripIndentTransformer, trimResultTransformer, replaceSubstitutionTransformer(/&/g, '&'), replaceSubstitutionTransformer(//g, '>'), replaceSubstitutionTransformer(/\"/g, '"'), replaceSubstitutionTransformer(/'/g, '''), replaceSubstitutionTransformer(/`/g, '`'));\nexport default safeHtml;","import TemplateTag from '../TemplateTag';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLine = new TemplateTag(replaceResultTransformer(/(?:\\n(?:\\s*))+/g, ' '), trimResultTransformer);\nexport default oneLine;","import TemplateTag from '../TemplateTag';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineTrim = new TemplateTag(replaceResultTransformer(/(?:\\n\\s*)/g, ''), trimResultTransformer);\nexport default oneLineTrim;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaLists = new TemplateTag(inlineArrayTransformer({\n separator: ','\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaLists;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaListsOr = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'or'\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaListsOr;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaListsAnd = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'and'\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaListsAnd;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar inlineLists = new TemplateTag(inlineArrayTransformer, stripIndentTransformer, trimResultTransformer);\nexport default inlineLists;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineInlineLists = new TemplateTag(inlineArrayTransformer, replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineInlineLists;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\nexport default stripIndent;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar stripIndents = new TemplateTag(stripIndentTransformer('all'), trimResultTransformer);\nexport default stripIndents;","\"use strict\";\n\nmodule.exports = Object.assign;","'use strict';\n\nvar reactIs = require('react-is');\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nvar b = \"function\" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for(\"react.element\") : 60103,\n d = b ? Symbol.for(\"react.portal\") : 60106,\n e = b ? Symbol.for(\"react.fragment\") : 60107,\n f = b ? Symbol.for(\"react.strict_mode\") : 60108,\n g = b ? Symbol.for(\"react.profiler\") : 60114,\n h = b ? Symbol.for(\"react.provider\") : 60109,\n k = b ? Symbol.for(\"react.context\") : 60110,\n l = b ? Symbol.for(\"react.async_mode\") : 60111,\n m = b ? Symbol.for(\"react.concurrent_mode\") : 60111,\n n = b ? Symbol.for(\"react.forward_ref\") : 60112,\n p = b ? Symbol.for(\"react.suspense\") : 60113,\n q = b ? Symbol.for(\"react.suspense_list\") : 60120,\n r = b ? Symbol.for(\"react.memo\") : 60115,\n t = b ? Symbol.for(\"react.lazy\") : 60116,\n v = b ? Symbol.for(\"react.block\") : 60121,\n w = b ? Symbol.for(\"react.fundamental\") : 60117,\n x = b ? Symbol.for(\"react.responder\") : 60118,\n y = b ? Symbol.for(\"react.scope\") : 60119;\n\nfunction z(a) {\n if (\"object\" === typeof a && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return \"object\" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \"object\" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.withPrefix = withPrefix;\nexports.withAssetPrefix = withAssetPrefix;\nexports.navigate = exports.default = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nvar _utils = require(\"@gatsbyjs/reach-router/lib/utils\");\n\nvar _parsePath = require(\"./parse-path\");\n\nexports.parsePath = _parsePath.parsePath;\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith(\"/\");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith(\"./\") || path.startsWith(\"../\")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : \"/\";\n return \"\" + (base !== null && base !== void 0 && base.endsWith(\"/\") ? base.slice(0, -1) : base) + (path.startsWith(\"/\") ? path : \"/\" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __PATH_PREFIX__ !== \"undefined\" ? __PATH_PREFIX__ : undefined : __PATH_PREFIX__;\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __BASE_PATH__ !== \"undefined\" ? __BASE_PATH__ : undefined : __BASE_PATH__;\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith(\"http://\") && !path.startsWith(\"https://\") && !path.startsWith(\"//\");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it's already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === \"number\") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(\" \"),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== \"undefined\" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty(\"current\")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, [\"to\", \"getProps\", \"onClick\", \"onMouseEnter\", \"activeClassName\", \"activeStyle\", \"innerRef\", \"partiallyActive\", \"state\", \"replace\", \"_location\"]);\n\n if (process.env.NODE_ENV !== \"production\" && !isLocalLink(to)) {\n console.warn(\"External link \" + to + \" was detected in a Link component. Use the Link component only for internal links. See: https://gatsby.dev/internal-links\");\n }\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement(\"a\", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle \"target=_blank\"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.default = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.navigate = navigate;","\"use strict\";\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || \"/\";\n var search = \"\";\n var hash = \"\";\n var hashIndex = pathname.indexOf(\"#\");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf(\"?\");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === \"?\" ? \"\" : search,\n hash: hash === \"#\" ? \"\" : hash\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nexports.ScrollContext = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\n\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sessionStorage = require(\"./session-storage\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener(\"scroll\", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n }\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n }\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nvar _react = require(\"react\");\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}","/* eslint-disable no-unused-expressions */\nimport { stripIndent } from \"common-tags\"\nimport camelCase from \"camelcase\"\nimport { IGatsbyImageData } from \".\"\n\nconst DEFAULT_PIXEL_DENSITIES = [0.25, 0.5, 1, 2]\nexport const DEFAULT_BREAKPOINTS = [750, 1080, 1366, 1920]\nexport const EVERY_BREAKPOINT = [\n 320,\n 654,\n 768,\n 1024,\n 1366,\n 1600,\n 1920,\n 2048,\n 2560,\n 3440,\n 3840,\n 4096,\n]\nconst DEFAULT_FLUID_WIDTH = 800\nconst DEFAULT_FIXED_WIDTH = 800\nconst DEFAULT_ASPECT_RATIO = 4 / 3\n\nexport type Fit = \"cover\" | \"fill\" | \"inside\" | \"outside\" | \"contain\"\n\nexport type Layout = \"fixed\" | \"fullWidth\" | \"constrained\"\nexport type ImageFormat = \"jpg\" | \"png\" | \"webp\" | \"avif\" | \"auto\" | \"\"\n\n/**\n * The minimal required reporter, as we don't want to import it from gatsby-cli\n */\nexport interface IReporter {\n warn(message: string): void\n}\n\nexport interface ISharpGatsbyImageArgs {\n layout?: Layout\n formats?: Array\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n }\n jpgOptions?: Record\n pngOptions?: Record\n webpOptions?: Record\n avifOptions?: Record\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array\n breakpoints?: Array\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record\n ) => IImage\n layout?: Layout\n formats?: Array\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record\n breakpoints?: Array\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.substr(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add(sourceMetadata.format)\n }\n\n if (formats.has(`jpg`) && formats.has(`png`)) {\n reporter.warn(\n `[${pluginName}] Specifying both 'jpg' and 'png' formats is not supported. Using 'auto' instead`\n )\n if (sourceMetadata.format === `jpg`) {\n formats.delete(`png`)\n } else {\n formats.delete(`jpg`)\n }\n }\n\n const imageSizes = calculateImageSizes({ ...args, sourceMetadata })\n\n const result: IGatsbyImageData[\"images\"] = {\n sources: [],\n }\n\n let sizes = args.sizes\n if (!sizes) {\n sizes = getSizes(imageSizes.presentationWidth, layout)\n }\n\n formats.forEach(format => {\n const images = imageSizes.sizes\n .map(size => {\n const imageSrc = generateImageSource(\n filename,\n size,\n Math.round(size / imageSizes.aspectRatio),\n format,\n fit,\n options\n )\n if (\n !imageSrc?.width ||\n !imageSrc.height ||\n !imageSrc.src ||\n !imageSrc.format\n ) {\n reporter.warn(\n `[${pluginName}] The resolver for image ${filename} returned an invalid value.`\n )\n return undefined\n }\n return imageSrc\n })\n .filter(Boolean)\n\n if (format === `jpg` || format === `png` || format === `auto`) {\n const unscaled =\n images.find(img => img.width === imageSizes.unscaledWidth) || images[0]\n\n if (unscaled) {\n result.fallback = {\n src: unscaled.src,\n srcSet: getSrcSet(images),\n sizes,\n }\n }\n } else {\n result.sources?.push({\n srcSet: getSrcSet(images),\n sizes,\n type: `image/${format}`,\n })\n }\n })\n\n const imageProps: Partial = {\n images: result,\n layout,\n backgroundColor,\n }\n\n if (placeholderURL) {\n imageProps.placeholder = { fallback: placeholderURL }\n }\n\n switch (layout) {\n case `fixed`:\n imageProps.width = imageSizes.presentationWidth\n imageProps.height = imageSizes.presentationHeight\n break\n\n case `fullWidth`:\n imageProps.width = 1\n imageProps.height = 1 / imageSizes.aspectRatio\n break\n\n case `constrained`:\n imageProps.width = args.width || imageSizes.presentationWidth || 1\n imageProps.height = (imageProps.width || 1) / imageSizes.aspectRatio\n }\n\n return imageProps as IGatsbyImageData\n}\n\nconst dedupeAndSortDensities = (values: Array): Array =>\n Array.from(new Set([1, ...values])).sort(sortNumeric)\n\nexport function calculateImageSizes(args: IImageSizeArgs): IImageSizes {\n const {\n width,\n height,\n filename,\n layout = `constrained`,\n sourceMetadata: imgDimensions,\n reporter = { warn },\n breakpoints = DEFAULT_BREAKPOINTS,\n } = args\n\n // check that all dimensions provided are positive\n const userDimensions = { width, height }\n const erroneousUserDimensions = Object.entries(userDimensions).filter(\n ([_, size]) => typeof size === `number` && size < 1\n )\n if (erroneousUserDimensions.length) {\n throw new Error(\n `Specified dimensions for images must be positive numbers (> 0). Problem dimensions you have are ${erroneousUserDimensions\n .map(dim => dim.join(`: `))\n .join(`, `)}`\n )\n }\n\n if (layout === `fixed`) {\n return fixedImageSizes(args)\n } else if (layout === `constrained`) {\n return responsiveImageSizes(args)\n } else if (layout === `fullWidth`) {\n return responsiveImageSizes({ breakpoints, ...args })\n } else {\n reporter.warn(\n `No valid layout was provided for the image at ${filename}. Valid image layouts are fixed, fullWidth, and constrained. Found ${layout}`\n )\n return {\n sizes: [imgDimensions.width],\n presentationWidth: imgDimensions.width,\n presentationHeight: imgDimensions.height,\n aspectRatio: imgDimensions.width / imgDimensions.height,\n unscaledWidth: imgDimensions.width,\n }\n }\n}\nexport function fixedImageSizes({\n filename,\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n reporter = { warn },\n}: IImageSizeArgs): IImageSizes {\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n if (!width) {\n if (!height) {\n width = DEFAULT_FIXED_WIDTH\n } else {\n width = Math.round(height * aspectRatio)\n }\n } else if (!height) {\n height = Math.round(width / aspectRatio)\n }\n\n const originalWidth = width // will use this for presentationWidth, don't want to lose it\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n\n // If the image is smaller than requested, warn the user that it's being processed as such\n // print out this message with the necessary information before we overwrite it for sizing\n if (isTopSizeOverriden) {\n const fixedDimension = imgDimensions.width < width ? `width` : `height`\n reporter.warn(stripIndent`\n The requested ${fixedDimension} \"${\n fixedDimension === `width` ? width : height\n }px\" for the image ${filename} was larger than the actual image ${fixedDimension} of ${\n imgDimensions[fixedDimension]\n }px. If possible, replace the current image with a larger one.`)\n\n if (fixedDimension === `width`) {\n width = imgDimensions.width\n height = Math.round(width / aspectRatio)\n } else {\n height = imgDimensions.height\n width = height * aspectRatio\n }\n }\n\n const sizes = densities\n .filter(size => size >= 1) // remove smaller densities because fixed images don't need them\n .map(density => Math.round(density * (width as number)))\n .filter(size => size <= imgDimensions.width)\n\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function responsiveImageSizes({\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n breakpoints,\n layout,\n}: IImageSizeArgs): IImageSizes {\n let sizes\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n // Case 1: width of height were passed in, make sure it isn't larger than the actual image\n width = width && Math.min(width, imgDimensions.width)\n height = height && Math.min(height, imgDimensions.height)\n\n // Case 2: neither width or height were passed in, use default size\n if (!width && !height) {\n width = Math.min(DEFAULT_FLUID_WIDTH, imgDimensions.width)\n height = width / aspectRatio\n }\n\n // if it still hasn't been found, calculate width from the derived height.\n // TS isn't smart enough to realise the type for height has been narrowed here\n if (!width) {\n width = (height as number) * aspectRatio\n }\n\n const originalWidth = width\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n if (isTopSizeOverriden) {\n width = imgDimensions.width\n height = imgDimensions.height\n }\n\n width = Math.round(width)\n\n if (breakpoints?.length > 0) {\n sizes = breakpoints.filter(size => size <= imgDimensions.width)\n\n // If a larger breakpoint has been filtered-out, add the actual image width instead\n if (\n sizes.length < breakpoints.length &&\n !sizes.includes(imgDimensions.width)\n ) {\n sizes.push(imgDimensions.width)\n }\n } else {\n sizes = densities.map(density => Math.round(density * (width as number)))\n sizes = sizes.filter(size => size <= imgDimensions.width)\n }\n\n // ensure that the size passed in is included in the final output\n if (layout === `constrained` && !sizes.includes(width)) {\n sizes.push(width)\n }\n sizes = sizes.sort(sortNumeric)\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function getDimensionsAndAspectRatio(\n dimensions,\n options\n): { width: number; height: number; aspectRatio: number } {\n // Calculate the eventual width/height of the image.\n const imageAspectRatio = dimensions.width / dimensions.height\n\n let width = options.width\n let height = options.height\n\n switch (options.fit) {\n case `fill`: {\n width = options.width ? options.width : dimensions.width\n height = options.height ? options.height : dimensions.height\n break\n }\n case `inside`: {\n const widthOption = options.width\n ? options.width\n : Number.MAX_SAFE_INTEGER\n const heightOption = options.height\n ? options.height\n : Number.MAX_SAFE_INTEGER\n\n width = Math.min(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.min(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n case `outside`: {\n const widthOption = options.width ? options.width : 0\n const heightOption = options.height ? options.height : 0\n\n width = Math.max(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.max(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n\n default: {\n if (options.width && !options.height) {\n width = options.width\n height = Math.round(options.width / imageAspectRatio)\n }\n\n if (options.height && !options.width) {\n width = Math.round(options.height * imageAspectRatio)\n height = options.height\n }\n }\n }\n\n return {\n width,\n height,\n aspectRatio: width / height,\n }\n}\n","/* eslint-disable no-unused-expressions */\nimport {\n useState,\n CSSProperties,\n useEffect,\n HTMLAttributes,\n ImgHTMLAttributes,\n ReactEventHandler,\n SetStateAction,\n Dispatch,\n RefObject,\n} from \"react\"\nimport { Node } from \"gatsby\"\nimport { PlaceholderProps } from \"./placeholder\"\nimport { MainImageProps } from \"./main-image\"\nimport type { IGatsbyImageData } from \"./gatsby-image.browser\"\nimport {\n IGatsbyImageHelperArgs,\n generateImageData,\n Layout,\n EVERY_BREAKPOINT,\n IImage,\n ImageFormat,\n} from \"../image-utils\"\nconst imageCache = new Set()\n\n// Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\nexport const hasNativeLazyLoadSupport = (): boolean =>\n typeof HTMLImageElement !== `undefined` &&\n `loading` in HTMLImageElement.prototype\n\nexport function gatsbyImageIsInstalled(): boolean {\n return typeof GATSBY___IMAGE !== `undefined` && GATSBY___IMAGE\n}\n\nexport function storeImageloaded(cacheKey?: string): void {\n if (cacheKey) {\n imageCache.add(cacheKey)\n }\n}\n\nexport function hasImageLoaded(cacheKey: string): boolean {\n return imageCache.has(cacheKey)\n}\nexport type IGatsbyImageDataParent = T & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type FileNode = Node & {\n childImageSharp?: IGatsbyImageDataParent\n}\n\nconst isGatsbyImageData = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageData | any\n): node is IGatsbyImageData =>\n // 🦆 check for a deep prop to be sure this is a valid gatsbyImageData object\n Boolean(node?.images?.fallback?.src)\n\nconst isGatsbyImageDataParent = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent | any\n): node is IGatsbyImageDataParent => Boolean(node?.gatsbyImageData)\n\nexport type ImageDataLike = FileNode | IGatsbyImageDataParent | IGatsbyImageData\nexport const getImage = (node: ImageDataLike): IGatsbyImageData | undefined => {\n if (isGatsbyImageData(node)) {\n return node\n }\n if (isGatsbyImageDataParent(node)) {\n return node.gatsbyImageData\n }\n return node?.childImageSharp?.gatsbyImageData\n}\n\nexport const getSrc = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.src\n\nexport const getSrcSet = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.srcSet\n\nexport function getWrapperProps(\n width: number,\n height: number,\n layout: Layout\n): Pick, \"className\" | \"style\"> & {\n \"data-gatsby-image-wrapper\": string\n} {\n const wrapperStyle: CSSProperties = {}\n\n let className = `gatsby-image-wrapper`\n\n // If the plugin isn't installed we need to apply the styles inline\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.position = `relative`\n wrapperStyle.overflow = `hidden`\n }\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n } else if (layout === `constrained`) {\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.display = `inline-block`\n wrapperStyle.verticalAlign = `top`\n }\n className = `gatsby-image-wrapper gatsby-image-wrapper-constrained`\n }\n\n return {\n className,\n \"data-gatsby-image-wrapper\": ``,\n style: wrapperStyle,\n }\n}\n\nexport async function applyPolyfill(\n ref: RefObject\n): Promise {\n if (!(`objectFitPolyfill` in window)) {\n await import(\n /* webpackChunkName: \"gatsby-plugin-image-objectfit-polyfill\" */ `objectFitPolyfill`\n )\n }\n ;(window as any).objectFitPolyfill(ref.current)\n}\n\nexport interface IUrlBuilderArgs {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs> {\n baseUrl: string\n /**\n * For constrained and fixed images, the size of the image element\n */\n width?: number\n height?: number\n /**\n * If available, pass the source image width and height\n */\n sourceWidth?: number\n sourceHeight?: number\n /**\n * If only one dimension is passed, then this will be used to calculate the other.\n */\n aspectRatio?: number\n layout?: Layout\n /**\n * Returns a URL based on the passed arguments. Should be a pure function\n */\n urlBuilder: (args: IUrlBuilderArgs) => string\n\n /**\n * Should be a data URI\n */\n placeholderURL?: string\n backgroundColor?: string\n /**\n * Used in error messages etc\n */\n pluginName?: string\n\n /**\n * If you do not support auto-format, pass an array of image types here\n */\n formats?: Array\n\n breakpoints?: Array\n\n /**\n * Passed to the urlBuilder function\n */\n options?: OptionsType\n}\n\n/**\n * Use this hook to generate gatsby-plugin-image data in the browser.\n */\nexport function getImageData({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs): IGatsbyImageData {\n if (\n !breakpoints?.length &&\n (props.layout === `fullWidth` || (props.layout as string) === `FULL_WIDTH`)\n ) {\n breakpoints = EVERY_BREAKPOINT\n }\n const generateImageSource = (\n baseUrl: string,\n width: number,\n height?: number,\n format?: ImageFormat\n ): IImage => {\n return {\n width,\n height,\n format,\n src: urlBuilder({ baseUrl, width, height, options, format }),\n }\n }\n\n const sourceMetadata: IGatsbyImageHelperArgs[\"sourceMetadata\"] = {\n width: sourceWidth,\n height: sourceHeight,\n format: `auto`,\n }\n\n const args: IGatsbyImageHelperArgs = {\n ...props,\n pluginName,\n generateImageSource,\n filename: baseUrl,\n formats,\n breakpoints,\n sourceMetadata,\n }\n return generateImageData(args)\n}\n\nexport function getMainProps(\n isLoading: boolean,\n isLoaded: boolean,\n images: IGatsbyImageData[\"images\"],\n loading?: \"eager\" | \"lazy\",\n toggleLoaded?: (loaded: boolean) => void,\n cacheKey?: string,\n ref?: RefObject,\n style: CSSProperties = {}\n): Partial {\n const onLoad: ReactEventHandler = function (e) {\n if (isLoaded) {\n return\n }\n\n storeImageloaded(cacheKey)\n\n const target = e.currentTarget\n const img = new Image()\n img.src = target.currentSrc\n\n if (img.decode) {\n // Decode the image through javascript to support our transition\n img\n .decode()\n .catch(() => {\n // ignore error, we just go forward\n })\n .then(() => {\n toggleLoaded(true)\n })\n } else {\n toggleLoaded(true)\n }\n }\n\n // Polyfill \"object-fit\" if unsupported (mostly IE)\n if (ref?.current && !(`objectFit` in document.documentElement.style)) {\n ref.current.dataset.objectFit = style.objectFit ?? `cover`\n ref.current.dataset.objectPosition = `${style.objectPosition ?? `50% 50%`}`\n applyPolyfill(ref)\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n transform: `translateZ(0)`,\n transition: `opacity 250ms linear`,\n width: `100%`,\n willChange: `opacity`,\n ...style,\n }\n }\n\n const result = {\n ...images,\n loading,\n shouldLoad: isLoading,\n \"data-main-image\": ``,\n style: {\n ...style,\n opacity: isLoaded ? 1 : 0,\n },\n onLoad,\n ref,\n }\n\n return result\n}\n\nexport type PlaceholderImageAttrs = ImgHTMLAttributes &\n Pick & {\n \"data-placeholder-image\"?: string\n }\n\nexport function getPlaceholderProps(\n placeholder: PlaceholderImageAttrs | undefined,\n isLoaded: boolean,\n layout: Layout,\n width?: number,\n height?: number,\n backgroundColor?: string,\n objectFit?: CSSProperties[\"objectFit\"],\n objectPosition?: CSSProperties[\"objectPosition\"]\n): PlaceholderImageAttrs {\n const wrapperStyle: CSSProperties = {}\n\n if (backgroundColor) {\n wrapperStyle.backgroundColor = backgroundColor\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n wrapperStyle.backgroundColor = backgroundColor\n wrapperStyle.position = `relative`\n } else if (layout === `constrained`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n } else if (layout === `fullWidth`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n }\n }\n\n if (objectFit) {\n wrapperStyle.objectFit = objectFit\n }\n\n if (objectPosition) {\n wrapperStyle.objectPosition = objectPosition\n }\n const result: PlaceholderImageAttrs = {\n ...placeholder,\n \"aria-hidden\": true,\n \"data-placeholder-image\": ``,\n style: {\n opacity: isLoaded ? 0 : 1,\n transition: `opacity 500ms linear`,\n ...wrapperStyle,\n },\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n result.style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n width: `100%`,\n }\n }\n\n return result\n}\n\nexport function useImageLoaded(\n cacheKey: string,\n loading: \"lazy\" | \"eager\",\n ref: any\n): {\n isLoaded: boolean\n isLoading: boolean\n toggleLoaded: Dispatch>\n} {\n const [isLoaded, toggleLoaded] = useState(false)\n const [isLoading, toggleIsLoading] = useState(loading === `eager`)\n\n const rAF =\n typeof window !== `undefined` && `requestAnimationFrame` in window\n ? requestAnimationFrame\n : function (cb: TimerHandler): number {\n return setTimeout(cb, 16)\n }\n const cRAF =\n typeof window !== `undefined` && `cancelAnimationFrame` in window\n ? cancelAnimationFrame\n : clearTimeout\n\n useEffect(() => {\n let interval: number\n // @see https://stackoverflow.com/questions/44074747/componentdidmount-called-before-ref-callback/50019873#50019873\n function toggleIfRefExists(): void {\n if (ref.current) {\n if (loading === `eager` && ref.current.complete) {\n storeImageloaded(cacheKey)\n toggleLoaded(true)\n } else {\n toggleIsLoading(true)\n }\n } else {\n interval = rAF(toggleIfRefExists)\n }\n }\n toggleIfRefExists()\n\n return (): void => {\n cRAF(interval)\n }\n }, [])\n\n return {\n isLoading,\n isLoaded,\n toggleLoaded,\n }\n}\n\nexport interface IArtDirectedImage {\n media: string\n image: IGatsbyImageData\n}\n\n/**\n * Generate a Gatsby image data object with multiple, art-directed images that display at different\n * resolutions.\n *\n * @param defaultImage The image displayed when no media query matches.\n * It is also used for all other settings applied to the image, such as width, height and layout.\n * You should pass a className to the component with media queries to adjust the size of the container,\n * as this cannot be adjusted automatically.\n * @param artDirected Array of objects which each contains a `media` string which is a media query\n * such as `(min-width: 320px)`, and the image object to use when that query matches.\n */\nexport function withArtDirection(\n defaultImage: IGatsbyImageData,\n artDirected: Array\n): IGatsbyImageData {\n const { images, placeholder, ...props } = defaultImage\n const output: IGatsbyImageData = {\n ...props,\n images: {\n ...images,\n sources: [],\n },\n placeholder: placeholder && {\n ...placeholder,\n sources: [],\n },\n }\n\n artDirected.forEach(({ media, image }) => {\n if (!media) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(\n \"[gatsby-plugin-image] All art-directed images passed to must have a value set for `media`. Skipping.\"\n )\n }\n return\n }\n\n if (\n image.layout !== defaultImage.layout &&\n process.env.NODE_ENV === `development`\n ) {\n console.warn(\n `[gatsby-plugin-image] Mismatched image layout: expected \"${defaultImage.layout}\" but received \"${image.layout}\". All art-directed images use the same layout as the default image`\n )\n }\n\n output.images.sources.push(\n ...image.images.sources.map(source => {\n return { ...source, media }\n }),\n {\n media,\n srcSet: image.images.fallback.srcSet,\n }\n )\n\n if (!output.placeholder) {\n return\n }\n\n output.placeholder.sources.push({\n media,\n srcSet: image.placeholder.fallback,\n })\n })\n output.images.sources.push(...images.sources)\n if (placeholder?.sources) {\n output.placeholder?.sources.push(...placeholder.sources)\n }\n return output\n}\n","// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \n\nimport React, { Fragment, FunctionComponent } from \"react\"\nimport terserMacro from \"../../macros/terser.macro\"\nimport { Layout } from \"../image-utils\"\n\nexport interface ILayoutWrapperProps {\n layout: Layout\n width: number\n height: number\n}\n\nconst NativeScriptLoading: FunctionComponent = () => (\n \n)\n\nexport function getSizer(\n layout: Layout,\n width: number,\n height: number\n): string {\n let sizer: string | null = null\n if (layout === `fullWidth`) {\n sizer = `
`\n }\n if (layout === `constrained`) {\n sizer = `
\"\"
`\n }\n return sizer\n}\n\nconst Sizer: FunctionComponent = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n
\n )\n }\n if (layout === `constrained`) {\n return (\n
\n \n
\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent = function LayoutWrapper({\n children,\n ...props\n}) {\n return (\n \n \n {children}\n\n {\n // eslint-disable-next-line no-undef\n SERVER && \n }\n \n )\n}\n","/* eslint-disable filenames/match-regex */\nimport React, {\n FunctionComponent,\n ImgHTMLAttributes,\n forwardRef,\n LegacyRef,\n} from \"react\"\nimport * as PropTypes from \"prop-types\"\n\nexport interface IResponsiveImageProps {\n sizes?: string\n srcSet: string\n}\n\nexport type SourceProps = IResponsiveImageProps &\n (\n | {\n media: string\n type?: string\n }\n | {\n media?: string\n type: string\n }\n )\n\ntype FallbackProps = { src: string } & Partial\n\ntype ImageProps = ImgHTMLAttributes & {\n src: string\n alt: string\n shouldLoad: boolean\n innerRef: LegacyRef\n}\n\nexport type PictureProps = ImgHTMLAttributes & {\n fallback?: FallbackProps\n sources?: Array\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n innerRef,\n ...props\n}) {\n return (\n \n )\n}\n\nexport const Picture = forwardRef(\n function Picture(\n { fallback, sources = [], shouldLoad = true, ...props },\n ref\n ) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n \n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n \n {sources.map(({ media, srcSet, type }) => (\n \n ))}\n {fallbackImage}\n \n )\n }\n)\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string,\n shouldLoad: PropTypes.bool,\n}\n\nPicture.displayName = `Picture`\nPicture.propTypes = {\n alt: PropTypes.string.isRequired,\n shouldLoad: PropTypes.bool,\n fallback: PropTypes.exact({\n src: PropTypes.string.isRequired,\n srcSet: PropTypes.string,\n sizes: PropTypes.string,\n }),\n sources: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.exact({\n media: PropTypes.string.isRequired,\n type: PropTypes.string,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n PropTypes.exact({\n media: PropTypes.string,\n type: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n ])\n ),\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\nimport { Picture, SourceProps } from \"./picture\"\n\nexport type PlaceholderProps = ImgHTMLAttributes & {\n fallback?: string\n sources?: Array\n}\n\nexport const Placeholder: FunctionComponent = function Placeholder({\n fallback,\n ...props\n}) {\n if (fallback) {\n return (\n \n )\n } else {\n return
\n }\n}\n\nPlaceholder.displayName = `Placeholder`\nPlaceholder.propTypes = {\n fallback: PropTypes.string,\n sources: Picture.propTypes?.sources,\n alt: function (props, propName, componentName): Error | null {\n if (!props[propName]) {\n return null\n }\n return new Error(\n `Invalid prop \\`${propName}\\` supplied to \\`${componentName}\\`. Validation failed.`\n )\n },\n}\n","import React, { forwardRef } from \"react\"\nimport { Picture, PictureProps } from \"./picture\"\n\nexport type MainImageProps = PictureProps\n\nexport const MainImage = forwardRef(\n function MainImage(props, ref) {\n return (\n <>\n \n \n \n )\n }\n)\n\nMainImage.displayName = `MainImage`\nMainImage.propTypes = Picture.propTypes\n","import React, {\n ElementType,\n FunctionComponent,\n CSSProperties,\n WeakValidationMap,\n} from \"react\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport { getWrapperProps, getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage, MainImageProps } from \"./main-image\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport PropTypes from \"prop-types\"\n\nconst removeNewLines = (str: string): string => str.replace(/\\n/g, ``)\n\nexport const GatsbyImageHydrator: FunctionComponent<{\n as?: ElementType\n style?: CSSProperties\n className?: string\n}> = function GatsbyImageHydrator({ as: Type = `div`, children, ...props }) {\n return {children}\n}\n\nexport const GatsbyImage: FunctionComponent = function GatsbyImage({\n as,\n className,\n class: preactClass,\n style,\n image,\n loading = `lazy`,\n imgClassName,\n imgStyle,\n backgroundColor,\n objectFit,\n objectPosition,\n ...props\n}) {\n if (!image) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n return null\n }\n if (preactClass) {\n className = preactClass\n }\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: placeholderBackgroundColor,\n } = image\n\n const { style: wStyle, className: wClass, ...wrapperProps } = getWrapperProps(\n width,\n height,\n layout\n )\n\n const cleanedImages: IGatsbyImageData[\"images\"] = {\n fallback: undefined,\n sources: [],\n }\n if (images.fallback) {\n cleanedImages.fallback = {\n ...images.fallback,\n srcSet: images.fallback.srcSet\n ? removeNewLines(images.fallback.srcSet)\n : undefined,\n }\n }\n\n if (images.sources) {\n cleanedImages.sources = images.sources.map(source => {\n return {\n ...source,\n srcSet: removeNewLines(source.srcSet),\n }\n })\n }\n\n return (\n \n \n \n\n )}\n // When eager is set we want to start the isLoading state on true (we want to load the img without react)\n {...getMainProps(\n loading === `eager`,\n false,\n cleanedImages,\n loading,\n undefined,\n undefined,\n undefined,\n imgStyle\n )}\n />\n \n \n )\n}\n\nexport const altValidator: PropTypes.Validator = (\n props: GatsbyImageProps,\n propName,\n componentName,\n ...rest\n): Error | undefined => {\n if (!props.alt && props.alt !== ``) {\n return new Error(\n `The \"alt\" prop is required in ${componentName}. If the image is purely presentational then pass an empty string: e.g. alt=\"\". Learn more: https://a11y-style-guide.com/style-guide/section-media.html`\n )\n }\n return PropTypes.string(props, propName, componentName, ...rest)\n}\nexport const propTypes = {\n image: PropTypes.object.isRequired,\n alt: altValidator,\n} as WeakValidationMap\n","/* eslint-disable no-unused-expressions */\nimport React, {\n Component,\n ElementType,\n createRef,\n MutableRefObject,\n FunctionComponent,\n ImgHTMLAttributes,\n RefObject,\n CSSProperties,\n} from \"react\"\nimport {\n getWrapperProps,\n hasNativeLazyLoadSupport,\n storeImageloaded,\n hasImageLoaded,\n gatsbyImageIsInstalled,\n} from \"./hooks\"\nimport { PlaceholderProps } from \"./placeholder\"\nimport { MainImageProps } from \"./main-image\"\nimport { Layout } from \"../image-utils\"\nimport { getSizer } from \"./layout-wrapper\"\nimport { propTypes } from \"./gatsby-image.server\"\nimport { Unobserver } from \"./intersection-observer\"\nimport { render } from \"react-dom\"\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface GatsbyImageProps\n extends Omit<\n ImgHTMLAttributes,\n \"placeholder\" | \"onLoad\" | \"src\" | \"srcSet\" | \"width\" | \"height\"\n > {\n alt: string\n as?: ElementType\n className?: string\n class?: string\n imgClassName?: string\n image: IGatsbyImageData\n imgStyle?: CSSProperties\n backgroundColor?: string\n objectFit?: CSSProperties[\"objectFit\"]\n objectPosition?: CSSProperties[\"objectPosition\"]\n onLoad?: () => void\n onError?: () => void\n onStartLoad?: (props: { wasCached?: boolean }) => void\n}\n\nexport interface IGatsbyImageData {\n layout: Layout\n width: number\n height: number\n backgroundColor?: string\n images: Pick\n placeholder?: Pick\n}\n\nclass GatsbyImageHydrator extends Component<\n GatsbyImageProps,\n { isLoading: boolean; isLoaded: boolean }\n> {\n root: RefObject = createRef<\n HTMLImageElement | undefined\n >()\n hydrated: MutableRefObject = { current: false }\n forceRender: MutableRefObject = {\n // In dev we use render not hydrate, to avoid hydration warnings\n current: process.env.NODE_ENV === `development`,\n }\n lazyHydrator: () => void | null = null\n ref = createRef()\n unobserveRef: Unobserver\n\n constructor(props) {\n super(props)\n\n this.state = {\n isLoading: hasNativeLazyLoadSupport(),\n isLoaded: false,\n }\n }\n\n _lazyHydrate(props, state): Promise {\n const hasSSRHtml = this.root.current.querySelector(\n `[data-gatsby-image-ssr]`\n )\n // On first server hydration do nothing\n if (hasNativeLazyLoadSupport() && hasSSRHtml && !this.hydrated.current) {\n this.hydrated.current = true\n return Promise.resolve()\n }\n\n return import(`./lazy-hydrate`).then(({ lazyHydrate }) => {\n this.lazyHydrator = lazyHydrate(\n {\n image: props.image.images,\n isLoading: state.isLoading,\n isLoaded: state.isLoaded,\n toggleIsLoaded: () => {\n props.onLoad?.()\n\n this.setState({\n isLoaded: true,\n })\n },\n ref: this.ref,\n ...props,\n },\n this.root,\n this.hydrated,\n this.forceRender\n )\n })\n }\n\n /**\n * Choose if setupIntersectionObserver should use the image cache or not.\n */\n _setupIntersectionObserver(useCache = true): void {\n import(`./intersection-observer`).then(({ createIntersectionObserver }) => {\n const intersectionObserver = createIntersectionObserver(() => {\n if (this.root.current) {\n const cacheKey = JSON.stringify(this.props.image.images)\n this.props.onStartLoad?.({\n wasCached: useCache && hasImageLoaded(cacheKey),\n })\n this.setState({\n isLoading: true,\n isLoaded: useCache && hasImageLoaded(cacheKey),\n })\n }\n })\n\n if (this.root.current) {\n this.unobserveRef = intersectionObserver(this.root)\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState): boolean {\n let hasChanged = false\n if (!this.state.isLoading && nextState.isLoading && !nextState.isLoaded) {\n // Props have changed between SSR and hydration, so we need to force render instead of hydrate\n this.forceRender.current = true\n }\n // this check mostly means people do not have the correct ref checks in place, we want to reset some state to suppport loading effects\n if (this.props.image.images !== nextProps.image.images) {\n // reset state, we'll rely on intersection observer to reload\n if (this.unobserveRef) {\n // unregister intersectionObserver\n this.unobserveRef()\n\n // // on unmount, make sure we cleanup\n if (this.hydrated.current && this.lazyHydrator) {\n render(null, this.root.current)\n }\n }\n\n this.setState(\n {\n isLoading: false,\n isLoaded: false,\n },\n () => {\n this._setupIntersectionObserver(false)\n }\n )\n\n hasChanged = true\n }\n\n if (this.root.current && !hasChanged) {\n this._lazyHydrate(nextProps, nextState)\n }\n\n return false\n }\n\n componentDidMount(): void {\n if (this.root.current) {\n const ssrElement = this.root.current.querySelector(\n `[data-gatsby-image-ssr]`\n ) as HTMLImageElement\n const cacheKey = JSON.stringify(this.props.image.images)\n\n // when SSR and native lazyload is supported we'll do nothing ;)\n if (\n hasNativeLazyLoadSupport() &&\n ssrElement &&\n gatsbyImageIsInstalled()\n ) {\n this.props.onStartLoad?.({ wasCached: false })\n\n // When the image is already loaded before we have hydrated, we trigger onLoad and cache the item\n if (ssrElement.complete) {\n this.props.onLoad?.()\n storeImageloaded(cacheKey)\n } else {\n // We need the current class context (this) inside our named onLoad function\n // The named function is necessary to easily remove the listener afterward.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n // add an onLoad to the image\n ssrElement.addEventListener(`load`, function onLoad() {\n ssrElement.removeEventListener(`load`, onLoad)\n\n _this.props.onLoad?.()\n storeImageloaded(cacheKey)\n })\n }\n\n return\n }\n\n // Fallback to custom lazy loading (intersection observer)\n this._setupIntersectionObserver(true)\n }\n }\n\n componentWillUnmount(): void {\n // Cleanup when onmount happens\n if (this.unobserveRef) {\n // unregister intersectionObserver\n this.unobserveRef()\n\n // on unmount, make sure we cleanup\n if (this.hydrated.current && this.lazyHydrator) {\n this.lazyHydrator()\n }\n }\n\n return\n }\n\n render(): JSX.Element {\n const Type = this.props.as || `div`\n const { width, height, layout } = this.props.image\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n let className = this.props.className\n // preact class\n if (this.props.class) {\n className = this.props.class\n }\n\n const sizer = getSizer(layout, width, height)\n\n return (\n \n )\n }\n}\n\nexport const GatsbyImage: FunctionComponent = function GatsbyImage(\n props\n) {\n if (!props.image) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n }\n return null\n }\n\n if (!gatsbyImageIsInstalled()) {\n console.error(\n `[gatsby-plugin-image] You're missing out on some cool performance features. Please add \"gatsby-plugin-image\" to your gatsby-config.js`\n )\n }\n const { className, class: classSafe, backgroundColor, image } = props\n const { width, height, layout } = image\n const propsKey = JSON.stringify([\n width,\n height,\n layout,\n className,\n classSafe,\n backgroundColor,\n ])\n return \n}\n\nGatsbyImage.propTypes = propTypes\n\nGatsbyImage.displayName = `GatsbyImage`\n","import React, { FunctionComponent, ReactElement } from \"react\"\nimport {\n altValidator,\n GatsbyImage as GatsbyImageServer,\n} from \"./gatsby-image.server\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport PropTypes from \"prop-types\"\nimport { ISharpGatsbyImageArgs } from \"../image-utils\"\n\nexport interface IStaticImageProps\n extends Omit,\n Omit {\n src: string\n}\n\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nexport function _getStaticImage(\n GatsbyImage: FunctionComponent\n): React.FC {\n return function StaticImage({\n src,\n __imageData: imageData,\n __error,\n // We extract these because they're not meant to be passed-down to GatsbyImage\n /* eslint-disable @typescript-eslint/no-unused-vars */\n width,\n height,\n aspectRatio,\n tracedSVGOptions,\n placeholder,\n formats,\n quality,\n transformOptions,\n jpgOptions,\n pngOptions,\n webpOptions,\n avifOptions,\n blurredOptions,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...props\n }): ReactElement {\n if (__error) {\n console.warn(__error)\n }\n\n if (imageData) {\n return \n }\n console.warn(`Image not loaded`, src)\n if (!__error && process.env.NODE_ENV === `development`) {\n console.warn(\n `Please ensure that \"gatsby-plugin-image\" is included in the plugins array in gatsby-config.js, and that your version of gatsby is at least 2.24.78`\n )\n }\n return null\n }\n}\n\nconst StaticImage: React.FC<\n IStaticImageProps & IPrivateProps\n> = _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator = (\n props: IStaticImageProps & IPrivateProps,\n propName: keyof IStaticImageProps & IPrivateProps,\n ...rest\n) => {\n if (\n props.layout === `fullWidth` &&\n (propName === `width` || propName === `height`) &&\n props[propName]\n ) {\n return new Error(\n `\"${propName}\" ${props[propName]} may not be passed when layout is fullWidth.`\n )\n }\n return PropTypes.number(props, propName, ...rest)\n}\n\nconst validLayouts = new Set([`fixed`, `fullWidth`, `constrained`])\n\nexport const propTypes = {\n src: PropTypes.string.isRequired,\n alt: altValidator,\n width: checkDimensionProps,\n height: checkDimensionProps,\n sizes: PropTypes.string,\n layout: (props: IStaticImageProps & IPrivateProps): Error | undefined => {\n if (props.layout === undefined) {\n return undefined\n }\n if (validLayouts.has(props.layout)) {\n return undefined\n }\n\n return new Error(\n `Invalid value ${props.layout}\" provided for prop \"layout\". Defaulting to \"constrained\". Valid values are \"fixed\", \"fullWidth\" or \"constrained\".`\n )\n },\n}\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import {\n GatsbyImage as GatsbyImageBrowser,\n IGatsbyImageData,\n} from \"./gatsby-image.browser\"\nimport React from \"react\"\nimport {\n _getStaticImage,\n propTypes,\n IStaticImageProps,\n} from \"./static-image.server\"\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nconst StaticImage: React.FC<\n IStaticImageProps & IPrivateProps\n> = _getStaticImage(GatsbyImageBrowser)\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import * as React from \"react\"\nexport function LaterHydrator({\n children,\n}: React.PropsWithChildren>): React.ReactNode {\n React.useEffect(() => {\n // eslint-disable-next-line no-unused-expressions\n import(`./lazy-hydrate`)\n }, [])\n\n return children\n}\n","import React from \"react\"\nimport { LaterHydrator } from \".\"\n\nexport function wrapRootElement({ element }) {\n return {element}\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _gatsby = require(\"gatsby\");\n\nvar _getManifestPathname = _interopRequireDefault(require(\"./get-manifest-pathname\"));\n\n/* global __MANIFEST_PLUGIN_HAS_LOCALISATION__ */\n// when we don't have localisation in our manifest, we tree shake everything away\nif (__MANIFEST_PLUGIN_HAS_LOCALISATION__) {\n exports.onRouteUpdate = function (_ref, pluginOptions) {\n var location = _ref.location;\n var localize = pluginOptions.localize;\n var manifestFilename = (0, _getManifestPathname.default)(location.pathname, localize);\n var manifestEl = document.head.querySelector(\"link[rel=\\\"manifest\\\"]\");\n\n if (manifestEl) {\n manifestEl.setAttribute(\"href\", (0, _gatsby.withPrefix)(manifestFilename));\n }\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\n/**\n * Get a manifest filename depending on localized pathname\n *\n * @param {string} pathname\n * @param {Array<{start_url: string, lang: string}>} localizedManifests\n * @return string\n */\nvar _default = function _default(pathname, localizedManifests) {\n var defaultFilename = \"manifest.webmanifest\";\n\n if (!Array.isArray(localizedManifests)) {\n return defaultFilename;\n }\n\n var localizedManifest = localizedManifests.find(function (app) {\n return pathname.startsWith(app.start_url);\n });\n\n if (!localizedManifest) {\n return defaultFilename;\n }\n\n return \"manifest_\" + localizedManifest.lang + \".webmanifest\";\n};\n\nexports.default = _default;","// prefer default export if available\nconst preferDefault = m => (m && m.default) || m\n\nexports.components = {\n \"component---src-pages-404-tsx\": () => import(\"./../../../src/pages/404.tsx\" /* webpackChunkName: \"component---src-pages-404-tsx\" */),\n \"component---src-pages-contact-tsx\": () => import(\"./../../../src/pages/contact.tsx\" /* webpackChunkName: \"component---src-pages-contact-tsx\" */),\n \"component---src-pages-index-tsx\": () => import(\"./../../../src/pages/index.tsx\" /* webpackChunkName: \"component---src-pages-index-tsx\" */)\n}\n\n","module.exports = [{\n plugin: require('../../../node_modules/gatsby-plugin-image/gatsby-browser.js'),\n options: {\"plugins\":[]},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-manifest/gatsby-browser.js'),\n options: {\"plugins\":[],\"background_color\":\"#000000\",\"icon\":\"src/images/icon.png\",\"legacy\":true,\"theme_color_in_head\":true,\"cache_busting_mode\":\"query\",\"crossOrigin\":\"anonymous\",\"include_favicon\":true,\"cacheDigest\":\"7df75940c5c4611dd59c4b1856069d9e\"},\n },{\n plugin: require('../gatsby-browser.js'),\n options: {\"plugins\":[]},\n }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst {\n getResourceURLsForPathname,\n loadPage,\n loadPageSync,\n} = require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","export default path => {\n if (path === undefined) {\n return path\n }\n if (path === `/`) {\n return `/`\n }\n if (path.charAt(path.length - 1) === `/`) {\n return path.slice(0, -1)\n }\n return path\n}\n","import { pick } from \"@gatsbyjs/reach-router/lib/utils\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n const pathname = decodeURIComponent(rawPathname)\n // Remove the pathPrefix from the pathname.\n const trimmedPathname = stripPrefix(\n pathname,\n decodeURIComponent(__BASE_PATH__)\n )\n // Remove any hashfragment\n .split(`#`)[0]\n // Remove search query\n .split(`?`)[0]\n\n return trimmedPathname\n}\n\nfunction absolutify(path) {\n // If it's already absolute, return as-is\n if (\n path.startsWith(`/`) ||\n path.startsWith(`https://`) ||\n path.startsWith(`http://`)\n ) {\n return path\n }\n // Calculate path relative to current location, adding a trailing slash to\n // match behavior of @reach/router\n return new URL(\n path,\n window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return normalizePagePath(path.route.originalPath)\n }\n\n return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return path.params\n }\n\n return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n if (pathCache.has(trimmedPathname)) {\n return pathCache.get(trimmedPathname)\n }\n\n const redirect = maybeGetBrowserRedirect(rawPathname)\n if (redirect) {\n return findPath(redirect.toPath)\n }\n\n let foundPath = findMatchPath(trimmedPathname)\n\n if (!foundPath) {\n foundPath = cleanPath(rawPathname)\n }\n\n pathCache.set(trimmedPathname, foundPath)\n\n return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n let foundPath = trimmedPathname\n if (foundPath === `/index.html`) {\n foundPath = `/`\n }\n\n foundPath = normalizePagePath(foundPath)\n\n return foundPath\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport Link, {\n withPrefix,\n withAssetPrefix,\n navigate,\n push,\n replace,\n navigateTo,\n parsePath,\n} from \"gatsby-link\"\nimport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nimport PageRenderer from \"./public-page-renderer\"\nimport loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nconst StaticQueryContext = React.createContext({})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n
\n )\n}\n\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport {\n Link,\n withAssetPrefix,\n withPrefix,\n graphql,\n parsePath,\n navigate,\n useScrollRestoration,\n StaticQueryContext,\n StaticQuery,\n PageRenderer,\n useStaticQuery,\n prefetchPathname,\n}\n","const support = function (feature) {\n if (typeof document === `undefined`) {\n return false\n }\n const fakeLink = document.createElement(`link`)\n try {\n if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n return fakeLink.relList.supports(feature)\n }\n } catch (err) {\n return false\n }\n return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n return new Promise((resolve, reject) => {\n if (typeof document === `undefined`) {\n reject()\n return\n }\n\n const link = document.createElement(`link`)\n link.setAttribute(`rel`, `prefetch`)\n link.setAttribute(`href`, url)\n\n Object.keys(options).forEach(key => {\n link.setAttribute(key, options[key])\n })\n\n link.onload = resolve\n link.onerror = reject\n\n const parentElement =\n document.getElementsByTagName(`head`)[0] ||\n document.getElementsByName(`script`)[0].parentNode\n parentElement.appendChild(link)\n })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(`GET`, url, true)\n\n req.onload = () => {\n if (req.status === 200) {\n resolve()\n } else {\n reject()\n }\n }\n\n req.send(null)\n })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n ? linkPrefetchStrategy\n : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n return new Promise(resolve => {\n if (preFetched[url]) {\n resolve()\n return\n }\n\n supportedPrefetchStrategy(url, options)\n .then(() => {\n resolve()\n preFetched[url] = true\n })\n .catch(() => {}) // 404s are logged to the console anyway\n })\n}\n\nexport default prefetch\n","import prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n /**\n * At least one of critical resources failed to load\n */\n Error: `error`,\n /**\n * Resources loaded successfully\n */\n Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n s = s[0] === `/` ? s.slice(1) : s\n s = s.endsWith(`/`) ? s.slice(0, -1) : s\n return s\n}\n\nconst createPageDataUrl = path => {\n const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json`\n}\n\nfunction doFetch(url, method = `GET`) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(method, url, true)\n req.onreadystatechange = () => {\n if (req.readyState == 4) {\n resolve(req)\n }\n }\n req.send(null)\n })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n if (\n `connection` in navigator &&\n typeof navigator.connection !== `undefined`\n ) {\n if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n return false\n }\n if (navigator.connection.saveData) {\n return false\n }\n }\n return true\n}\n\nconst toPageResources = (pageData, component = null) => {\n const page = {\n componentChunkName: pageData.componentChunkName,\n path: pageData.path,\n webpackCompilationHash: pageData.webpackCompilationHash,\n matchPath: pageData.matchPath,\n staticQueryHashes: pageData.staticQueryHashes,\n }\n\n return {\n component,\n json: pageData.result,\n page,\n }\n}\n\nexport class BaseLoader {\n constructor(loadComponent, matchPaths) {\n // Map of pagePath -> Page. Where Page is an object with: {\n // status: PageResourceStatus.Success || PageResourceStatus.Error,\n // payload: PageResources, // undefined if PageResourceStatus.Error\n // }\n // PageResources is {\n // component,\n // json: pageData.result,\n // page: {\n // componentChunkName,\n // path,\n // webpackCompilationHash,\n // staticQueryHashes\n // },\n // staticQueryResults\n // }\n this.pageDb = new Map()\n this.inFlightDb = new Map()\n this.staticQueryDb = {}\n this.pageDataDb = new Map()\n this.prefetchTriggered = new Set()\n this.prefetchCompleted = new Set()\n this.loadComponent = loadComponent\n setMatchPaths(matchPaths)\n }\n\n inFlightNetworkRequests = new Map()\n\n memoizedGet(url) {\n let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n if (!inFlightPromise) {\n inFlightPromise = doFetch(url, `GET`)\n this.inFlightNetworkRequests.set(url, inFlightPromise)\n }\n\n // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n return inFlightPromise\n .then(response => {\n this.inFlightNetworkRequests.delete(url)\n return response\n })\n .catch(err => {\n this.inFlightNetworkRequests.delete(url)\n throw err\n })\n }\n\n setApiRunner(apiRunner) {\n this.apiRunner = apiRunner\n this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n }\n\n fetchPageDataJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.path === undefined) {\n throw new Error(`not a valid pageData response`)\n }\n\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: jsonPayload,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404 page and it doesn't exist, we're done\n if (pagePath === `/404.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPageDataJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n loadPageDataJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDataDb.has(pagePath)) {\n const pageData = this.pageDataDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPageDataJson({ pagePath }).then(pageData => {\n this.pageDataDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n findMatchPath(rawPath) {\n return findMatchPath(rawPath)\n }\n\n // TODO check all uses of this and whether they use undefined for page resources not exist\n loadPage(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const page = this.pageDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n if (page.error) {\n return {\n error: page.error,\n status: page.status,\n }\n }\n\n return Promise.resolve(page.payload)\n }\n }\n\n if (this.inFlightDb.has(pagePath)) {\n return this.inFlightDb.get(pagePath)\n }\n\n const inFlightPromise = Promise.all([\n this.loadAppData(),\n this.loadPageDataJson(pagePath),\n ]).then(allData => {\n const result = allData[1]\n if (result.status === PageResourceStatus.Error) {\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n let pageData = result.payload\n const { componentChunkName, staticQueryHashes = [] } = pageData\n\n const finalResult = {}\n\n const componentChunkPromise = this.loadComponent(componentChunkName).then(\n component => {\n finalResult.createdAt = new Date()\n let pageResources\n if (!component || component instanceof Error) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = component\n } else {\n finalResult.status = PageResourceStatus.Success\n if (result.notFound === true) {\n finalResult.notFound = true\n }\n pageData = Object.assign(pageData, {\n webpackCompilationHash: allData[0]\n ? allData[0].webpackCompilationHash\n : ``,\n })\n pageResources = toPageResources(pageData, component)\n }\n // undefined if final result is an error\n return pageResources\n }\n )\n\n const staticQueryBatchPromise = Promise.all(\n staticQueryHashes.map(staticQueryHash => {\n // Check for cache in case this static query result has already been loaded\n if (this.staticQueryDb[staticQueryHash]) {\n const jsonPayload = this.staticQueryDb[staticQueryHash]\n return { staticQueryHash, jsonPayload }\n }\n\n return this.memoizedGet(\n `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n )\n .then(req => {\n const jsonPayload = JSON.parse(req.responseText)\n return { staticQueryHash, jsonPayload }\n })\n .catch(() => {\n throw new Error(\n `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n )\n })\n })\n ).then(staticQueryResults => {\n const staticQueryResultsMap = {}\n\n staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n staticQueryResultsMap[staticQueryHash] = jsonPayload\n this.staticQueryDb[staticQueryHash] = jsonPayload\n })\n\n return staticQueryResultsMap\n })\n\n return (\n Promise.all([componentChunkPromise, staticQueryBatchPromise])\n .then(([pageResources, staticQueryResults]) => {\n let payload\n if (pageResources) {\n payload = { ...pageResources, staticQueryResults }\n finalResult.payload = payload\n emitter.emit(`onPostLoadPageResources`, {\n page: payload,\n pageResources: payload,\n })\n }\n\n this.pageDb.set(pagePath, finalResult)\n\n if (finalResult.error) {\n return {\n error: finalResult.error,\n status: finalResult.status,\n }\n }\n\n return payload\n })\n // when static-query fail to load we throw a better error\n .catch(err => {\n return {\n error: err,\n status: PageResourceStatus.Error,\n }\n })\n )\n })\n\n inFlightPromise\n .then(() => {\n this.inFlightDb.delete(pagePath)\n })\n .catch(error => {\n this.inFlightDb.delete(pagePath)\n throw error\n })\n\n this.inFlightDb.set(pagePath, inFlightPromise)\n\n return inFlightPromise\n }\n\n // returns undefined if the page does not exists in cache\n loadPageSync(rawPath, options = {}) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const pageData = this.pageDb.get(pagePath)\n\n if (pageData.payload) {\n return pageData.payload\n }\n\n if (options?.withErrorDetails) {\n return {\n error: pageData.error,\n status: pageData.status,\n }\n }\n }\n return undefined\n }\n\n shouldPrefetch(pagePath) {\n // Skip prefetching if we know user is on slow or constrained connection\n if (!doesConnectionSupportPrefetch()) {\n return false\n }\n\n // Check if the page exists.\n if (this.pageDb.has(pagePath)) {\n return false\n }\n\n return true\n }\n\n prefetch(pagePath) {\n if (!this.shouldPrefetch(pagePath)) {\n return false\n }\n\n // Tell plugins with custom prefetching logic that they should start\n // prefetching this path.\n if (!this.prefetchTriggered.has(pagePath)) {\n this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n this.prefetchTriggered.add(pagePath)\n }\n\n // If a plugin has disabled core prefetching, stop now.\n if (this.prefetchDisabled) {\n return false\n }\n\n const realPath = findPath(pagePath)\n // Todo make doPrefetch logic cacheable\n // eslint-disable-next-line consistent-return\n this.doPrefetch(realPath).then(() => {\n if (!this.prefetchCompleted.has(pagePath)) {\n this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n this.prefetchCompleted.add(pagePath)\n }\n })\n\n return true\n }\n\n doPrefetch(pagePath) {\n const pageDataUrl = createPageDataUrl(pagePath)\n return prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n )\n }\n\n hovering(rawPath) {\n this.loadPage(rawPath)\n }\n\n getResourceURLsForPathname(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDataDb.get(pagePath)\n if (page) {\n const pageResources = toPageResources(page.payload)\n\n return [\n ...createComponentUrls(pageResources.page.componentChunkName),\n createPageDataUrl(pagePath),\n ]\n } else {\n return null\n }\n }\n\n isPageNotFound(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDb.get(pagePath)\n return !page || page.notFound\n }\n\n loadAppData(retries = 0) {\n return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n req => {\n const { status, responseText } = req\n\n let appData\n\n if (status !== 200 && retries < 3) {\n // Retry 3 times incase of non-200 responses\n return this.loadAppData(retries + 1)\n }\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.webpackCompilationHash === undefined) {\n throw new Error(`not a valid app-data response`)\n }\n\n appData = jsonPayload\n } catch (err) {\n // continue regardless of error\n }\n }\n\n return appData\n }\n )\n }\n}\n\nconst createComponentUrls = componentChunkName =>\n (window.___chunkMapping[componentChunkName] || []).map(\n chunk => __PATH_PREFIX__ + chunk\n )\n\nexport class ProdLoader extends BaseLoader {\n constructor(asyncRequires, matchPaths) {\n const loadComponent = chunkName => {\n if (!asyncRequires.components[chunkName]) {\n throw new Error(\n `We couldn't find the correct component chunk with the name ${chunkName}`\n )\n }\n\n return (\n asyncRequires.components[chunkName]()\n .then(preferDefault)\n // loader will handle the case when component is error\n .catch(err => err)\n )\n }\n\n super(loadComponent, matchPaths)\n }\n\n doPrefetch(pagePath) {\n return super.doPrefetch(pagePath).then(result => {\n if (result.status !== PageResourceStatus.Success) {\n return Promise.resolve()\n }\n const pageData = result.payload\n const chunkName = pageData.componentChunkName\n const componentUrls = createComponentUrls(chunkName)\n return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n })\n }\n\n loadPageDataJson(rawPath) {\n return super.loadPageDataJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n instance = _loader\n}\n\nexport const publicLoader = {\n enqueue: rawPath => instance.prefetch(rawPath),\n\n // Real methods\n getResourceURLsForPathname: rawPath =>\n instance.getResourceURLsForPathname(rawPath),\n loadPage: rawPath => instance.loadPage(rawPath),\n // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n loadPageSync: (rawPath, options = {}) =>\n instance.loadPageSync(rawPath, options),\n prefetch: rawPath => instance.prefetch(rawPath),\n isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n hovering: rawPath => instance.hovering(rawPath),\n loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n if (instance) {\n return instance.staticQueryDb\n } else {\n return {}\n }\n}\n","import React, { createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\n\n// Renders page\nclass PageRenderer extends React.Component {\n render() {\n const props = {\n ...this.props,\n params: {\n ...grabMatchParams(this.props.location.pathname),\n ...this.props.pageResources.json.pageContext.__params,\n },\n }\n\n const pageElement = createElement(this.props.pageResources.component, {\n ...props,\n key: this.props.path || this.props.pageResources.page.path,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n { element: pageElement, props },\n pageElement,\n ({ result }) => {\n return { element: result, props }\n }\n ).pop()\n\n return wrappedPage\n }\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport { navigate as reachNavigate } from \"@gatsbyjs/reach-router\"\nimport { globalHistory } from \"@gatsbyjs/reach-router/lib/history\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n const redirect = maybeGetBrowserRedirect(pathname)\n\n if (redirect != null) {\n window.___replace(redirect.toPath)\n return true\n } else {\n return false\n }\n}\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n let { pathname } = parsePath(to)\n const redirect = maybeGetBrowserRedirect(pathname)\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath\n pathname = parsePath(to).pathname\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n\n // Check for initial page-load redirect\n maybeRedirect(window.location.pathname)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return
\n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onPreRouteUpdate(this.props.location, prevProps.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname, { withErrorDetails: true }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(location.pathname, {\n withErrorDetails: true,\n })\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport domReady from \"@mikaelkristiansson/domready\"\nimport { StaticQueryContext } from \"gatsby\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n return (\n \n \n {children}\n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n \n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). But\n // only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !== browserLoc.pathname &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath === `/404.html` ||\n pagePath.match(/^\\/404\\/?$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(__BASE_PATH__ + pagePath + browserLoc.search + browserLoc.hash, {\n replace: true,\n })\n }\n\n publicLoader.loadPage(browserLoc.pathname).then(page => {\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n window.___webpackCompilationHash = page.page.webpackCompilationHash\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = function App() {\n const onClientEntryRanRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!onClientEntryRanRef.current) {\n onClientEntryRanRef.current = true\n performance.mark(`onInitialClientRender`)\n\n apiRunner(`onInitialClientRender`)\n }\n }, [])\n\n return {SiteRoot}\n }\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n process.env.GATSBY_EXPERIMENTAL_CONCURRENT_FEATURES\n ? ReactDOM.unstable_createRoot\n : ReactDOM.hydrate\n )[0]\n\n domReady(() => {\n const container =\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : null\n\n if (renderer === ReactDOM.unstable_createRoot) {\n renderer(container, {\n hydrate: true,\n }).render()\n } else {\n renderer(, container)\n }\n })\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","exports.polyfill = Component => Component\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","import './src/utils/globals.css';\n\nconst addScript = url => {\n const script = document.createElement(\"script\")\n script.src = url\n script.async = true\n document.head.appendChild(script)\n}\n\nexport const onClientEntry = () => {\n window.onload = () => {\n addScript(\"https://stackpile.io/stack_162299.js\")\n }\n}\n","import invariant from \"invariant\"; ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : invariant(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexport { startsWith, pick, match, resolve, insertParams, validateRedirect, shallowCompare };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexport { globalHistory, navigate, createHistory, createMemorySource };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\nimport React, { useContext, createContext } from \"react\";\nimport invariant from \"invariant\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { startsWith, pick, resolve, match, insertParams, validateRedirect, shallowCompare } from \"./lib/utils\";\nimport { globalHistory, navigate, createHistory, createMemorySource } from \"./lib/history\"; ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext(\"Location\"); // sets up a listener if there isn't one already so apps don't need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return React.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : React.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it's ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return React.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === \"function\" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(React.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf(\"?\");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = \"\";\n var hash = \"\";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return React.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error(\"You can't call navigate on the server.\");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext(\"Base\", {\n baseuri: \"/\",\n basepath: \"/\",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return React.createElement(BaseContext.Consumer, null, function (baseContext) {\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RouterImpl, _extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? \"div\" : _props$component,\n domProps = _objectWithoutProperties(_props, [\"location\", \"navigate\", \"basepath\", \"primary\", \"children\", \"baseuri\", \"component\"]);\n\n var routes = React.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, \"\");\n\n var props = _extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = React.cloneElement(element, props, element.props.children ? React.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using 'div' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don't pass any props to 'div'\n\n var wrapperProps = primary ? _extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return React.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, React.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // \"\\n\\t\"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(React.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext(\"Focus\");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, [\"uri\", \"location\", \"component\"]);\n\n return React.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return React.createElement(FocusHandlerImpl, _extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don't focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return _extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return _extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (process.env.NODE_ENV === \"test\") {\n // getting cannot read property focus of null in the tests\n // and that bit of global `initialRender` state causes problems\n // should probably figure it out!\n return;\n }\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? \"div\" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, [\"children\", \"style\", \"requestFocus\", \"component\", \"uri\", \"location\"]);\n\n return React.createElement(Comp, _extends({\n style: _extends({\n outline: \"none\"\n }, style),\n tabIndex: \"-1\",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), React.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(React.Component);\n\npolyfill(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, [\"innerRef\"]);\n\n return React.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return React.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, [\"to\", \"state\", \"replace\", \"getProps\"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return React.createElement(\"a\", _extends({\n ref: ref || innerRef,\n \"aria-current\": isCurrent ? \"page\" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n var _location$state = _extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, [\"key\"]);\n\n shouldReplace = shallowCompare(_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = \"Link\";\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(React.Component);\n\nvar Redirect = function Redirect(props) {\n return React.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RedirectImpl, _extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return React.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return React.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");\n }\n\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === React.Fragment && element.props.children) {\n return React.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \": Children of must have a `path` or `default` prop, or be a ``. None found on element type `\" + element.type + \"`\") : invariant(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" requires both \\\"from\\\" and \\\"to\\\" props when inside a .\") : invariant(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.\") : invariant(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === \"/\" ? basepath : stripSlashes(basepath) + \"/\" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + \"/*\" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\nexport { Link, Location, LocationProvider, Match, Redirect, Router, ServerLocation, createHistory, createMemorySource, isRedirect, navigate, redirectTo, globalHistory, match as matchPath, useLocation, useNavigate, useParams, useMatch , BaseContext };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/app-99a0e7d225277dae074c.js b/js/packages/metaplex/public/app-99a0e7d225277dae074c.js new file mode 100644 index 0000000..8f0249a --- /dev/null +++ b/js/packages/metaplex/public/app-99a0e7d225277dae074c.js @@ -0,0 +1,3 @@ +/*! For license information please see app-99a0e7d225277dae074c.js.LICENSE.txt */ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[143],{8111:function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0},7560:function(t,e,n){"use strict";function r(){return(r=Object.assign||function(t){for(var e=1;e=0||(o[n]=t[n]);return o},t.exports.default=t.exports,t.exports.__esModule=!0},742:function(t){function e(n,r){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(n,r)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0},8921:function(t){function e(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0},9154:function(t){t.exports=function(){var t=!1;-1!==navigator.appVersion.indexOf("MSIE 10")&&(t=!0);var e,n=[],r="object"==typeof document&&document,o=t?r.documentElement.doScroll("left"):r.documentElement.doScroll,a="DOMContentLoaded",i=r&&(o?/^loaded|^c/:/^loaded|^i|^c/).test(r.readyState);return!i&&r&&r.addEventListener(a,e=function(){for(r.removeEventListener(a,e),i=1;e=n.shift();)e()}),function(t){i?setTimeout(t,0):n.push(t)}}()},9767:function(t,e,n){"use strict";n.d(e,{Z:function(){return et}});var r=n(6631),o=Math.abs,a=String.fromCharCode;function i(t){return t.trim()}function s(t,e,n){return t.replace(e,n)}function u(t,e){return t.indexOf(e)}function c(t,e){return 0|t.charCodeAt(e)}function l(t,e,n){return t.slice(e,n)}function f(t){return t.length}function p(t){return t.length}function d(t,e){return e.push(t),t}var h=1,v=1,m=0,g=0,y=0,w="";function b(t,e,n,r,o,a,i){return{value:t,root:e,parent:n,type:r,props:o,children:a,line:h,column:v,length:i,return:""}}function S(t,e,n){return b(t,e.root,e.parent,n,e.props,e.children,0)}function x(){return y=g>0?c(w,--g):0,v--,10===y&&(v=1,h--),y}function P(){return y=g2||E(y)>3?"":" "}function A(t,e){for(;--e&&P()&&!(y<48||y>102||y>57&&y<65||y>70&&y<97););return C(t,_()+(e<6&&32==k()&&32==P()))}function D(t){for(;P();)switch(y){case t:return g;case 34:case 39:return D(34===t||39===t?t:y);case 40:41===t&&D(t);break;case 92:P()}return g}function T(t,e){for(;P()&&t+y!==57&&(t+y!==84||47!==k()););return"/*"+C(e,g-1)+"*"+a(47===t?t:P())}function M(t){for(;!E(k());)P();return C(t,g)}var $="-ms-",N="-moz-",U="-webkit-",I="comm",Z="rule",F="decl";function W(t,e){for(var n="",r=p(t),o=0;o6)switch(c(t,e+1)){case 109:if(45!==c(t,e+4))break;case 102:return s(t,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+N+(108==c(t,e+3)?"$3":"$2-$3"))+t;case 115:return~u(t,"stretch")?H(s(t,"stretch","fill-available"),e)+t:t}break;case 4949:if(115!==c(t,e+1))break;case 6444:switch(c(t,f(t)-3-(~u(t,"!important")&&10))){case 107:return s(t,":",":"+U)+t;case 101:return s(t,/(.+:)([^;!]+)(;|!.+)?/,"$1"+U+(45===c(t,14)?"inline-":"")+"box$3$1"+U+"$2$3$1"+$+"$2box$3")+t}break;case 5936:switch(c(t,e+11)){case 114:return U+t+$+s(t,/[svh]\w+-[tblr]{2}/,"tb")+t;case 108:return U+t+$+s(t,/[svh]\w+-[tblr]{2}/,"tb-rl")+t;case 45:return U+t+$+s(t,/[svh]\w+-[tblr]{2}/,"lr")+t}return U+t+$+t+t}return t}function z(t){return O(G("",null,null,null,[""],t=R(t),0,[0],t))}function G(t,e,n,r,o,i,u,c,l){for(var p=0,h=0,v=u,m=0,g=0,y=0,w=1,b=1,S=1,C=0,E="",R=o,O=i,D=r,$=E;b;)switch(y=C,C=P()){case 34:case 39:case 91:case 40:$+=j(C);break;case 9:case 10:case 13:case 32:$+=L(y);break;case 92:$+=A(_()-1,7);continue;case 47:switch(k()){case 42:case 47:d(J(T(P(),_()),e,n),l);break;default:$+="/"}break;case 123*w:c[p++]=f($)*S;case 125*w:case 59:case 0:switch(C){case 0:case 125:b=0;case 59+h:g>0&&f($)-v&&d(g>32?B($+";",r,n,v-1):B(s($," ","")+";",r,n,v-2),l);break;case 59:$+=";";default:if(d(D=Q($,e,n,p,h,o,c,E,R=[],O=[],v),i),123===C)if(0===h)G($,e,D,D,R,i,v,c,O);else switch(m){case 100:case 109:case 115:G(t,D,D,r&&d(Q(t,D,D,0,0,o,c,E,o,R=[],v),O),o,O,v,c,r?R:O);break;default:G($,D,D,D,[""],O,v,c,O)}}p=h=g=0,w=S=1,E=$="",v=u;break;case 58:v=1+f($),g=y;default:if(w<1)if(123==C)--w;else if(125==C&&0==w++&&125==x())continue;switch($+=a(C),C*w){case 38:S=h>0?1:($+="\f",-1);break;case 44:c[p++]=(f($)-1)*S,S=1;break;case 64:45===k()&&($+=j(P())),m=k(),h=f(E=$+=M(_())),C++;break;case 45:45===y&&2==f($)&&(w=0)}}return i}function Q(t,e,n,r,a,u,c,f,d,h,v){for(var m=a-1,g=0===a?u:[""],y=p(g),w=0,S=0,x=0;w0?g[P]+" "+k:s(k,/&\f/g,g[P])))&&(d[x++]=_);return b(t,e,n,0===a?Z:f,d,h,v)}function J(t,e,n){return b(t,e,n,I,a(y),l(t,2,-2),0)}function B(t,e,n,r){return b(t,e,n,F,l(t,0,r),l(t,r+1,-1),r)}var K=function(t,e){return O(function(t,e){var n=-1,r=44;do{switch(E(r)){case 0:38===r&&12===k()&&(e[n]=1),t[n]+=M(g-1);break;case 2:t[n]+=j(r);break;case 4:if(44===r){t[++n]=58===k()?"&\f":"",e[n]=t[n].length;break}default:t[n]+=a(r)}}while(r=P());return t}(R(t),e))},V=new WeakMap,Y=function(t){if("rule"===t.type&&t.parent&&t.length){for(var e=t.value,n=t.parent,r=t.column===n.column&&t.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==t.props.length||58===e.charCodeAt(0)||V.get(n))&&!r){V.set(t,!0);for(var o=[],a=K(e,o),i=n.props,s=0,u=0;s=4;++r,o-=4)e=1540483477*(65535&(e=255&t.charCodeAt(r)|(255&t.charCodeAt(++r))<<8|(255&t.charCodeAt(++r))<<16|(255&t.charCodeAt(++r))<<24))+(59797*(e>>>16)<<16),n=1540483477*(65535&(e^=e>>>24))+(59797*(e>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&t.charCodeAt(r+2))<<16;case 2:n^=(255&t.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&t.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},a=n(5064),i=/[A-Z]|^ms/g,s=/_EMO_([^_]+?)_([^]*?)_EMO_/g,u=function(t){return 45===t.charCodeAt(1)},c=function(t){return null!=t&&"boolean"!=typeof t},l=(0,a.Z)((function(t){return u(t)?t:t.replace(i,"-$&").toLowerCase()})),f=function(t,e){switch(t){case"animation":case"animationName":if("string"==typeof e)return e.replace(s,(function(t,e,n){return d={name:e,styles:n,next:d},e}))}return 1===o[t]||u(t)||"number"!=typeof e||0===e?e:e+"px"};function p(t,e,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return d={name:n.name,styles:n.styles,next:d},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)d={name:r.name,styles:r.styles,next:d},r=r.next;return n.styles+";"}return function(t,e,n){var r="";if(Array.isArray(n))for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{},c=u.state,l=u.replace,f=void 0!==l&&l;if("number"==typeof e)t.history.go(e);else{c=n({},c,{key:Date.now()+""});try{i||f?t.history.replaceState(c,null,e):t.history.pushState(c,null,e)}catch(d){t.location[f?"replace":"assign"](e)}}a=r(t),i=!0;var p=new Promise((function(t){return s=t}));return o.forEach((function(t){return t({location:a,action:"PUSH"})})),p}}},a=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",e=t.indexOf("?"),n={pathname:e>-1?t.substr(0,e):t,search:e>-1?t.substr(e):""},r=0,o=[n],a=[null];return{get location(){return o[r]},addEventListener:function(t,e){},removeEventListener:function(t,e){},history:{get entries(){return o},get index(){return r},get state(){return a[r]},pushState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;r++,o.push({pathname:s,search:c.length?"?"+c:c}),a.push(t)},replaceState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;o[r]={pathname:s,search:c},a[r]=t},go:function(t){var e=r+t;e<0||e>a.length-1||(r=e)}}}},i=!("undefined"==typeof window||!window.document||!window.document.createElement),s=o(i?window:a()),u=s.navigate;e.V5=s},382:function(t,e,n){"use strict";e.__esModule=!0,e.shallowCompare=e.validateRedirect=e.insertParams=e.resolve=e.match=e.pick=e.startsWith=void 0;var r,o=n(7677),a=(r=o)&&r.__esModule?r:{default:r};var i=function(t,e){return t.substr(0,e.length)===e},s=function(t,e){for(var n=void 0,r=void 0,o=e.split("?")[0],i=d(o),s=""===i[0],c=p(t),f=0,h=c.length;fe.score?-1:t.index-e.index}))},d=function(t){return t.replace(/(^\/+|\/+$)/g,"").split("/")},h=function(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0})))&&n.length>0?"?"+n.join("&"):"")},v=["uri","path"];e.startsWith=i,e.pick=s,e.match=function(t,e){return s([{path:t}],e)},e.resolve=function(t,e){if(i(t,"/"))return t;var n=t.split("?"),r=n[0],o=n[1],a=e.split("?")[0],s=d(r),u=d(a);if(""===s[0])return h(a,o);if(!i(s[0],".")){var c=u.concat(s).join("/");return h(("/"===a?"":"/")+c,o)}for(var l=u.concat(s),f=[],p=0,v=l.length;p1?n-1:0),o=1;o0&&Array.isArray(r[0])&&(r=r[0]),this.transformers=r.map((function(t){return"function"==typeof t?t():t})),this.tag}return n(t,[{key:"interimTag",value:function(t,e){for(var n=arguments.length,o=Array(n>2?n-2:0),a=2;a0&&void 0!==arguments[0]?arguments[0]:i;return{onSubstitution:function(e,n){if(Array.isArray(e)){var r=e.length,o=t.separator,a=t.conjunction,i=t.serial,s=n.match(/(\n?[^\S\n]+)$/);if(e=s?e.join(o+s[1]):e.join(o+" "),a&&r>1){var u=e.lastIndexOf(o);e=e.slice(0,u)+(i?o:"")+" "+a+e.slice(u+1)}}return e}}};function u(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:"initial";return{onEndResult:function(e){if("initial"===t){var n=e.match(/^[^\S\n]*(?=\S)/gm),r=n&&Math.min.apply(Math,u(n.map((function(t){return t.length}))));if(r){var o=new RegExp("^.{"+r+"}","gm");return e.replace(o,"")}return e}if("all"===t)return e.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+t)}}},l=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return{onEndResult:function(e){if(""===t)return e.trim();if("start"===(t=t.toLowerCase())||"left"===t)return e.replace(/^\s*/,"");if("end"===t||"right"===t)return e.replace(/\s*$/,"");throw new Error("Side not supported: "+t)}}},f=(new a(s({separator:","}),c,l),new a(s({separator:",",conjunction:"and"}),c,l),new a(s({separator:",",conjunction:"or"}),c,l),function(t){return{onSubstitution:function(e,n){if(null==t||"string"!=typeof t)throw new Error("You need to specify a string character to split by.");return"string"==typeof e&&e.includes(t)&&(e=e.split(t)),e}}}),p=function(t){return null!=t&&!Number.isNaN(t)&&"boolean"!=typeof t},d=function(){return{onSubstitution:function(t){return Array.isArray(t)?t.filter(p):p(t)?t:""}}},h=(new a(f("\n"),d,s,c,l),function(t,e){return{onSubstitution:function(n,r){if(null==t||null==e)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return null==n?n:n.toString().replace(t,e)}}}),v=(new a(f("\n"),s,c,l,h(/&/g,"&"),h(//g,">"),h(/"/g,"""),h(/'/g,"'"),h(/`/g,"`")),function(t,e){return{onEndResult:function(n){if(null==t||null==e)throw new Error("replaceResultTransformer requires at least 2 arguments.");return n.replace(t,e)}}});new a(v(/(?:\n(?:\s*))+/g," "),l),new a(v(/(?:\n\s*)/g,""),l),new a(s({separator:","}),v(/(?:\s+)/g," "),l),new a(s({separator:",",conjunction:"or"}),v(/(?:\s+)/g," "),l),new a(s({separator:",",conjunction:"and"}),v(/(?:\s+)/g," "),l),new a(s,c,l),new a(s,v(/(?:\s+)/g," "),l),new a(c,l),new a(c("all"),l)},6694:function(t){"use strict";t.exports=Object.assign},4666:function(t,e,n){"use strict";var r=n(2250),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function u(t){return r.isMemo(t)?i:s[t.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,l=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,d=Object.getPrototypeOf,h=Object.prototype;t.exports=function t(e,n,r){if("string"!=typeof n){if(h){var o=d(n);o&&o!==h&&t(e,o,r)}var i=l(n);f&&(i=i.concat(f(n)));for(var s=u(e),v=u(n),m=0;m0)&&(r.unobserve(e),r.disconnect(),n())}))}))).observe(e),{instance:r,el:e}))},n.render=function(){var t=this,e=this.props,n=e.to,r=e.getProps,a=void 0===r?this.defaultGetProps:r,i=e.onClick,u=e.onMouseEnter,f=(e.activeClassName,e.activeStyle,e.innerRef,e.partiallyActive,e.state),d=e.replace,h=e._location,v=(0,o.default)(e,["to","getProps","onClick","onMouseEnter","activeClassName","activeStyle","innerRef","partiallyActive","state","replace","_location"]);var m=y(n,h.pathname);return g(m)?c.default.createElement(l.Link,(0,s.default)({to:m,state:f,getProps:a,innerRef:this.handleRef,onMouseEnter:function(t){u&&u(t),___loader.hovering((0,p.parsePath)(m).pathname)},onClick:function(e){if(i&&i(e),!(0!==e.button||t.props.target||e.defaultPrevented||e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)){e.preventDefault();var n=d,r=encodeURI(m)===h.pathname;"boolean"!=typeof d&&r&&(n=!0),window.___navigate(m,{state:f,replace:n})}return!0}},v)):c.default.createElement("a",(0,s.default)({href:m},v))},e}(c.default.Component);S.propTypes=(0,s.default)({},w,{onClick:u.default.func,to:u.default.string.isRequired,replace:u.default.bool,state:u.default.object});var x=c.default.forwardRef((function(t,e){return c.default.createElement(b,(0,s.default)({innerRef:e},t))}));e.ZP=x;e.c4=function(t,e){window.___navigate(y(t,window.location.pathname),e)}},3762:function(t,e){"use strict";e.__esModule=!0,e.parsePath=function(t){var e=t||"/",n="",r="",o=e.indexOf("#");-1!==o&&(r=e.substr(o),e=e.substr(0,o));var a=e.indexOf("?");-1!==a&&(n=e.substr(a),e=e.substr(0,a));return{pathname:e,search:"?"===n?"":n,hash:"#"===r?"":r}}},2802:function(t,e,n){"use strict";e.p2=e.$C=void 0;var r=n(1415);e.$C=r.ScrollHandler;var o=n(5492);e.p2=o.useScrollRestoration},1415:function(t,e,n){"use strict";var r=n(3291),o=n(4859);e.__esModule=!0,e.ScrollHandler=e.ScrollContext=void 0;var a=o(n(8111)),i=o(n(7111)),s=r(n(2784)),u=o(n(3980)),c=n(643),l=s.createContext(new c.SessionStorage);e.ScrollContext=l,l.displayName="GatsbyScrollContext";var f=function(t){function e(){for(var e,n=arguments.length,r=new Array(n),o=0;o=0||(o[n]=t[n]);return o}var l=new Set,f=function(){return"undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype};function p(t){t&&l.add(t)}function d(t){return l.has(t)}var h=function(t){var e;return function(t){var e,n;return Boolean(null==t||null==(e=t.images)||null==(n=e.fallback)?void 0:n.src)}(t)?t:function(t){return Boolean(null==t?void 0:t.gatsbyImageData)}(t)?t.gatsbyImageData:null==t||null==(e=t.childImageSharp)?void 0:e.gatsbyImageData};function v(t,e,r,o,a,i,u,c){var l,f;return void 0===c&&(c={}),null!=u&&u.current&&!("objectFit"in document.documentElement.style)&&(u.current.dataset.objectFit=null!=(l=c.objectFit)?l:"cover",u.current.dataset.objectPosition=""+(null!=(f=c.objectPosition)?f:"50% 50%"),function(t){try{var e=function(){window.objectFitPolyfill(t.current)},r=function(){if(!("objectFitPolyfill"in window))return Promise.resolve(n.e(879).then(n.t.bind(n,3879,23))).then((function(){}))}();Promise.resolve(r&&r.then?r.then(e):e())}catch(t){return Promise.reject(t)}}(u)),s({},r,{loading:o,shouldLoad:t,"data-main-image":"",style:s({},c,{opacity:e?1:0}),onLoad:function(t){if(!e){p(i);var n=t.currentTarget,r=new Image;r.src=n.currentSrc,r.decode?r.decode().catch((function(){})).then((function(){a(!0)})):a(!0)}},ref:u})}function m(t,e,n,r,o,a,i,u){var c={};a&&(c.backgroundColor=a,"fixed"===n?(c.width=r,c.height=o,c.backgroundColor=a,c.position="relative"):("constrained"===n||"fullWidth"===n)&&(c.position="absolute",c.top=0,c.left=0,c.bottom=0,c.right=0)),i&&(c.objectFit=i),u&&(c.objectPosition=u);var l=s({},t,{"aria-hidden":!0,"data-placeholder-image":"",style:s({opacity:e?0:1,transition:"opacity 500ms linear"},c)});return l}var g,y=function(t){var e=t.layout,n=t.width,o=t.height;return"fullWidth"===e?r.createElement("div",{"aria-hidden":!0,style:{paddingTop:o/n*100+"%"}}):"constrained"===e?r.createElement("div",{style:{maxWidth:n,display:"block"}},r.createElement("img",{alt:"",role:"presentation","aria-hidden":"true",src:"data:image/svg+xml;charset=utf-8,%3Csvg height='"+o+"' width='"+n+"' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E",style:{maxWidth:"100%",display:"block",position:"static"}})):null},w=function(t){var e=t.children,n=c(t,["children"]);return r.createElement(r.Fragment,null,r.createElement(y,Object.assign({},n)),e,!1)},b=function(t){var e=t.src,n=t.srcSet,o=t.loading,a=t.alt,i=void 0===a?"":a,s=t.shouldLoad,u=t.innerRef,l=c(t,["src","srcSet","loading","alt","shouldLoad","innerRef"]);return r.createElement("img",Object.assign({},l,{decoding:"async",loading:o,src:s?e:void 0,"data-src":s?void 0:e,srcSet:s?n:void 0,"data-srcset":s?void 0:n,alt:i,ref:u}))},S=(0,r.forwardRef)((function(t,e){var n=t.fallback,o=t.sources,a=void 0===o?[]:o,i=t.shouldLoad,s=void 0===i||i,u=c(t,["fallback","sources","shouldLoad"]),l=u.sizes||(null==n?void 0:n.sizes),f=r.createElement(b,Object.assign({},u,n,{sizes:l,shouldLoad:s,innerRef:e}));return a.length?r.createElement("picture",null,a.map((function(t){var e=t.media,n=t.srcSet,o=t.type;return r.createElement("source",{key:e+"-"+o+"-"+n,type:o,media:e,srcSet:s?n:void 0,"data-srcset":s?void 0:n,sizes:l})})),f):f}));b.propTypes={src:o.string.isRequired,alt:o.string.isRequired,sizes:o.string,srcSet:o.string,shouldLoad:o.bool},S.displayName="Picture",S.propTypes={alt:o.string.isRequired,shouldLoad:o.bool,fallback:(0,o.exact)({src:o.string.isRequired,srcSet:o.string,sizes:o.string}),sources:(0,o.arrayOf)((0,o.oneOfType)([(0,o.exact)({media:o.string.isRequired,type:o.string,sizes:o.string,srcSet:o.string.isRequired}),(0,o.exact)({media:o.string,type:o.string.isRequired,sizes:o.string,srcSet:o.string.isRequired})]))};var x=function(t){var e=t.fallback,n=c(t,["fallback"]);return e?r.createElement(S,Object.assign({},n,{fallback:{src:e},"aria-hidden":!0,alt:""})):r.createElement("div",Object.assign({},n))};x.displayName="Placeholder",x.propTypes={fallback:o.string,sources:null==(g=S.propTypes)?void 0:g.sources,alt:function(t,e,n){return t[e]?new Error("Invalid prop `"+e+"` supplied to `"+n+"`. Validation failed."):null}};var P=(0,r.forwardRef)((function(t,e){return r.createElement(r.Fragment,null,r.createElement(S,Object.assign({ref:e},t)),r.createElement("noscript",null,r.createElement(S,Object.assign({},t,{shouldLoad:!0}))))}));P.displayName="MainImage",P.propTypes=S.propTypes;var k=function(t,e,n){return t.alt||""===t.alt?a().string.apply(a(),[t,e,n].concat([].slice.call(arguments,3))):new Error('The "alt" prop is required in '+n+'. If the image is purely presentational then pass an empty string: e.g. alt="". Learn more: https://a11y-style-guide.com/style-guide/section-media.html')},_={image:a().object.isRequired,alt:k},C=function(t){var e,o;function a(e){var n;return(n=t.call(this,e)||this).root=(0,r.createRef)(),n.hydrated={current:!1},n.forceRender={current:!1},n.lazyHydrator=null,n.ref=(0,r.createRef)(),n.state={isLoading:f(),isLoaded:!1},n}o=t,(e=a).prototype=Object.create(o.prototype),e.prototype.constructor=e,u(e,o);var l=a.prototype;return l._lazyHydrate=function(t,e){var r=this,o=this.root.current.querySelector("[data-gatsby-image-ssr]");return f()&&o&&!this.hydrated.current?(this.hydrated.current=!0,Promise.resolve()):n.e(693).then(n.bind(n,2693)).then((function(n){r.lazyHydrator=(0,n.lazyHydrate)(s({image:t.image.images,isLoading:e.isLoading,isLoaded:e.isLoaded,toggleIsLoaded:function(){null==t.onLoad||t.onLoad(),r.setState({isLoaded:!0})},ref:r.ref},t),r.root,r.hydrated,r.forceRender)}))},l._setupIntersectionObserver=function(t){var e=this;void 0===t&&(t=!0),n.e(351).then(n.bind(n,3351)).then((function(n){var r=(0,n.createIntersectionObserver)((function(){if(e.root.current){var n=JSON.stringify(e.props.image.images);null==e.props.onStartLoad||e.props.onStartLoad({wasCached:t&&d(n)}),e.setState({isLoading:!0,isLoaded:t&&d(n)})}}));e.root.current&&(e.unobserveRef=r(e.root))}))},l.shouldComponentUpdate=function(t,e){var n=this,r=!1;return this.state.isLoading||!e.isLoading||e.isLoaded||(this.forceRender.current=!0),this.props.image.images!==t.image.images&&(this.unobserveRef&&(this.unobserveRef(),this.hydrated.current&&this.lazyHydrator&&(0,i.render)(null,this.root.current)),this.setState({isLoading:!1,isLoaded:!1},(function(){n._setupIntersectionObserver(!1)})),r=!0),this.root.current&&!r&&this._lazyHydrate(t,e),!1},l.componentDidMount=function(){if(this.root.current){var t=this.root.current.querySelector("[data-gatsby-image-ssr]"),e=JSON.stringify(this.props.image.images);if(f()&&t){var n,r;if(null==(n=(r=this.props).onStartLoad)||n.call(r,{wasCached:!1}),t.complete){var o,a;null==(o=(a=this.props).onLoad)||o.call(a),p(e)}else{var i=this;t.addEventListener("load",(function n(){t.removeEventListener("load",n),null==i.props.onLoad||i.props.onLoad(),p(e)}))}return}this._setupIntersectionObserver(!0)}},l.componentWillUnmount=function(){this.unobserveRef&&(this.unobserveRef(),this.hydrated.current&&this.lazyHydrator&&this.lazyHydrator())},l.render=function(){var t=this.props.as||"div",e=this.props.image,n=e.width,o=e.height,a=e.layout,i=function(t,e,n){var r={},o="gatsby-image-wrapper";return"fixed"===n?(r.width=t,r.height=e):"constrained"===n&&(o="gatsby-image-wrapper gatsby-image-wrapper-constrained"),{className:o,"data-gatsby-image-wrapper":"",style:r}}(n,o,a),u=i.style,l=i.className,f=c(i,["style","className"]),p=this.props.className;this.props.class&&(p=this.props.class);var d=function(t,e,n){var r=null;return"fullWidth"===t&&(r=''),"constrained"===t&&(r='
"),r}(a,n,o);return r.createElement(t,Object.assign({},f,{style:s({},u,this.props.style,{backgroundColor:this.props.backgroundColor}),className:l+(p?" "+p:""),ref:this.root,dangerouslySetInnerHTML:{__html:d},suppressHydrationWarning:!0}))},a}(r.Component),E=function(t){if(!t.image)return null;var e=t.image,n=JSON.stringify([e.width,e.height,e.layout,t.className,t.class,t.backgroundColor]);return r.createElement(C,Object.assign({key:n},t))};E.propTypes=_,E.displayName="GatsbyImage";var R,O=function(t,e){return"fullWidth"!==t.layout||"width"!==e&&"height"!==e||!t[e]?a().number.apply(a(),[t,e].concat([].slice.call(arguments,2))):new Error('"'+e+'" '+t[e]+" may not be passed when layout is fullWidth.")},j=new Set(["fixed","fullWidth","constrained"]),L={src:a().string.isRequired,alt:k,width:O,height:O,sizes:a().string,layout:function(t){if(void 0!==t.layout&&!j.has(t.layout))return new Error("Invalid value "+t.layout+'" provided for prop "layout". Defaulting to "constrained". Valid values are "fixed", "fullWidth" or "constrained".')}},A=(R=E,function(t){var e=t.src,n=t.__imageData,o=t.__error,a=c(t,["src","__imageData","__error","width","height","aspectRatio","tracedSVGOptions","placeholder","formats","quality","transformOptions","jpgOptions","pngOptions","webpOptions","avifOptions","blurredOptions"]);return o&&console.warn(o),n?r.createElement(R,Object.assign({image:n},a)):(console.warn("Image not loaded",e),null)});function D(t){var e=t.children;return(0,r.useEffect)((function(){n.e(693).then(n.bind(n,2693))}),[]),e}A.displayName="StaticImage",A.propTypes=L},4635:function(t,e,n){"use strict";n.r(e),n.d(e,{wrapRootElement:function(){return a}});n(2784);var r=n(2978),o=n(8832);function a(t){var e=t.element;return(0,o.tZ)(r.c,null,e)}},425:function(t,e,n){"use strict";var r=n(4859);n(8447),r(n(7118))},7118:function(t,e){"use strict";e.__esModule=!0,e.default=void 0;e.default=function(t,e){var n="manifest.webmanifest";if(!Array.isArray(e))return n;var r=e.find((function(e){return t.startsWith(e.start_url)}));return r?"manifest_"+r.lang+".webmanifest":n}},3857:function(t,e,n){e.components={"component---src-pages-404-tsx":function(){return n.e(218).then(n.bind(n,388))},"component---src-pages-index-tsx":function(){return n.e(691).then(n.bind(n,1684))}}},7386:function(t,e,n){t.exports=[{plugin:n(4635),options:{plugins:[]}},{plugin:n(425),options:{plugins:[],background_color:"#000000",icon:"src/images/icon.png",legacy:!0,theme_color_in_head:!0,cache_busting_mode:"query",crossOrigin:"anonymous",include_favicon:!0,cacheDigest:"7df75940c5c4611dd59c4b1856069d9e"}},{plugin:n(7630),options:{plugins:[]}}]},1625:function(t,e,n){var r=n(7386),o=n(9930).jN,a=o.getResourceURLsForPathname,i=o.loadPage,s=o.loadPageSync;e.h=function(t,e,n,o){void 0===e&&(e={});var u=r.map((function(n){if(n.plugin[t]){e.getResourceURLsForPathname=a,e.loadPage=i,e.loadPageSync=s;var r=n.plugin[t](e,n.options);return r&&o&&(e=o({args:e,result:r,plugin:n})),r}}));return(u=u.filter((function(t){return void 0!==t}))).length>0?u:n?[n]:[]},e.I=function(t,e,n){return r.reduce((function(n,r){return r.plugin[t]?n.then((function(){return r.plugin[t](e,r.options)})):n}),Promise.resolve())}},9831:function(t,e,n){"use strict";n.d(e,{Z:function(){return r}});var r=function(t){return t=t||Object.create(null),{on:function(e,n){(t[e]||(t[e]=[])).push(n)},off:function(e,n){t[e]&&t[e].splice(t[e].indexOf(n)>>>0,1)},emit:function(e,n){(t[e]||[]).slice().map((function(t){t(n)})),(t["*"]||[]).slice().map((function(t){t(e,n)}))}}}()},9843:function(t,e,n){"use strict";n.d(e,{UD:function(){return f},Cj:function(){return d},GA:function(){return p},DS:function(){return l}});var r=n(382),o=n(7272),a=function(t){return void 0===t?t:"/"===t?"/":"/"===t.charAt(t.length-1)?t.slice(0,-1):t},i=new Map,s=[],u=function(t){var e=decodeURIComponent(t);return(0,o.Z)(e,decodeURIComponent("")).split("#")[0].split("?")[0]};function c(t){return t.startsWith("/")||t.startsWith("https://")||t.startsWith("http://")?t:new URL(t,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname}var l=function(t){s=t},f=function(t){var e=h(t),n=s.map((function(t){var e=t.path;return{path:t.matchPath,originalPath:e}})),o=(0,r.pick)(n,e);return o?a(o.route.originalPath):null},p=function(t){var e=h(t),n=s.map((function(t){var e=t.path;return{path:t.matchPath,originalPath:e}})),o=(0,r.pick)(n,e);return o?o.params:{}},d=function(t){var e=u(c(t));if(i.has(e))return i.get(e);var n=f(e);return n||(n=h(t)),i.set(e,n),n},h=function(t){var e=u(c(t));return"/index.html"===e&&(e="/"),e=a(e)}},8447:function(t,e,n){"use strict";n.r(e),n.d(e,{Link:function(){return o.ZP},withAssetPrefix:function(){return o.mc},withPrefix:function(){return o.dq},graphql:function(){return v},parsePath:function(){return o.cP},navigate:function(){return o.c4},useScrollRestoration:function(){return a.p2},StaticQueryContext:function(){return f},StaticQuery:function(){return d},PageRenderer:function(){return s.a},useStaticQuery:function(){return h},prefetchPathname:function(){return l}});var r=n(2784),o=n(6739),a=n(2802),i=n(1553),s=n.n(i),u=n(9930),c=n(8832),l=u.ZP.enqueue,f=r.createContext({});function p(t){var e=t.staticQueryData,n=t.data,o=t.query,a=t.render,i=n?n.data:e[o]&&e[o].data;return(0,c.tZ)(r.Fragment,null,i&&a(i),!i&&(0,c.tZ)("div",null,"Loading (StaticQuery)"))}var d=function(t){var e=t.data,n=t.query,r=t.render,o=t.children;return(0,c.tZ)(f.Consumer,null,(function(t){return(0,c.tZ)(p,{data:e,query:n,render:r||o,staticQueryData:t})}))},h=function(t){var e;r.useContext;var n=r.useContext(f);if(isNaN(Number(t)))throw new Error("useStaticQuery was called with a string but expects to be called using `graphql`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql`"+t+"`);\n");if(null!==(e=n[t])&&void 0!==e&&e.data)return n[t].data;throw new Error("The result of this StaticQuery could not be fetched.\n\nThis is likely a bug in Gatsby and if refreshing the page does not fix it, please open an issue in https://github.com/gatsbyjs/gatsby/issues")};function v(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls are supposed to only be evaluated at compile time, and then compiled away. Unfortunately, something went wrong and the query was left in the compiled code.\n\nUnless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.")}},9930:function(t,e,n){"use strict";n.d(e,{uQ:function(){return f},kL:function(){return w},ZP:function(){return x},hs:function(){return P},jN:function(){return S},N1:function(){return b}});var r=n(5491);function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0)return s[s.length-1];if(t&&t.location.pathname===o)return i?decodeURI(i.slice(1)):[0,0];return!0}var C=function(t){function e(e){var n;return(n=t.call(this,e)||this).announcementRef=i.createRef(),n}(0,o.Z)(e,t);var n=e.prototype;return n.componentDidUpdate=function(t,e){var n=this;requestAnimationFrame((function(){var t="new page at "+n.props.location.pathname;document.title&&(t=document.title);var e=document.querySelectorAll("#gatsby-focus-wrapper h1");e&&e.length&&(t=e[0].textContent);var r="Navigated to "+t;n.announcementRef.current&&(n.announcementRef.current.innerText!==r&&(n.announcementRef.current.innerText=r))}))},n.render=function(){return(0,y.tZ)("div",(0,r.Z)({},v,{ref:this.announcementRef}))},e}(i.Component),E=function(t,e){var n,r;return t.href!==e.href||(null==t||null===(n=t.state)||void 0===n?void 0:n.key)!==(null==e||null===(r=e.state)||void 0===r?void 0:r.key)},R=function(t){function e(e){var n;return n=t.call(this,e)||this,x(e.location,null),n}(0,o.Z)(e,t);var n=e.prototype;return n.componentDidMount=function(){P(this.props.location,null)},n.shouldComponentUpdate=function(t){return!!E(t.location,this.props.location)&&(x(this.props.location,t.location),!0)},n.componentDidUpdate=function(t){E(t.location,this.props.location)&&P(this.props.location,t.location)},n.render=function(){return(0,y.tZ)(i.Fragment,null,this.props.children,(0,y.tZ)(C,{location:location}))},e}(i.Component),O=n(5672),j=n(3857);function L(t,e){for(var n in t)if(!(n in e))return!0;for(var r in e)if(t[r]!==e[r])return!0;return!1}var A=function(t){function e(e){var n;n=t.call(this)||this;var r=e.location,o=e.pageResources;return n.state={location:Object.assign({},r),pageResources:o||d.ZP.loadPageSync(r.pathname,{withErrorDetails:!0})},n}(0,o.Z)(e,t),e.getDerivedStateFromProps=function(t,e){var n=t.location;return e.location.href!==n.href?{pageResources:d.ZP.loadPageSync(n.pathname,{withErrorDetails:!0}),location:Object.assign({},n)}:{location:Object.assign({},n)}};var n=e.prototype;return n.loadResources=function(t){var e=this;d.ZP.loadPage(t).then((function(n){n&&n.status!==d.uQ.Error?e.setState({location:Object.assign({},window.location),pageResources:n}):(window.history.replaceState({},"",location.href),window.location=t)}))},n.shouldComponentUpdate=function(t,e){return e.pageResources?this.state.pageResources!==e.pageResources||(this.state.pageResources.component!==e.pageResources.component||(this.state.pageResources.json!==e.pageResources.json||(!(this.state.location.key===e.location.key||!e.pageResources.page||!e.pageResources.page.matchPath&&!e.pageResources.page.path)||function(t,e,n){return L(t.props,e)||L(t.state,n)}(this,t,e)))):(this.loadResources(t.location.pathname),!1)},n.render=function(){return this.props.children(this.state)},e}(i.Component),D=n(7272),T=new d.kL(j,[]);(0,d.N1)(T),T.setApiRunner(a.h),window.asyncRequires=j,window.___emitter=h.Z,window.___loader=d.jN,m.V5.listen((function(t){t.location.action=t.action})),window.___push=function(t){return k(t,{replace:!1})},window.___replace=function(t){return k(t,{replace:!0})},window.___navigate=function(t,e){return k(t,e)},S(window.location.pathname),(0,a.I)("onClientEntry").then((function(){(0,a.h)("registerServiceWorker").filter(Boolean).length>0&&n(1412);var t=function(t){return(0,y.tZ)(u.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},(0,y.tZ)(O.Z,t))},e=i.createContext({}),l=function(t){function n(){return t.apply(this,arguments)||this}return(0,o.Z)(n,t),n.prototype.render=function(){var t=this.props.children;return(0,y.tZ)(u.Location,null,(function(n){var r=n.location;return(0,y.tZ)(A,{location:r},(function(n){var r=n.pageResources,o=n.location,a=(0,d.hs)();return(0,y.tZ)(p.StaticQueryContext.Provider,{value:a},(0,y.tZ)(e.Provider,{value:{pageResources:r,location:o}},t))}))}))},n}(i.Component),h=function(n){function a(){return n.apply(this,arguments)||this}return(0,o.Z)(a,n),a.prototype.render=function(){var n=this;return(0,y.tZ)(e.Consumer,null,(function(e){var o=e.pageResources,a=e.location;return(0,y.tZ)(R,{location:a},(0,y.tZ)(c.$C,{location:a,shouldUpdateScroll:_},(0,y.tZ)(u.Router,{basepath:"",location:a,id:"gatsby-focus-wrapper"},(0,y.tZ)(t,(0,r.Z)({path:"/404.html"===o.page.path?(0,D.Z)(a.pathname,""):encodeURI(o.page.matchPath||o.page.path)},n.props,{location:a,pageResources:o},o.json)))))}))},a}(i.Component),v=window,m=v.pagePath,g=v.location;m&&""+m!==g.pathname&&!(T.findMatchPath((0,D.Z)(g.pathname,""))||"/404.html"===m||m.match(/^\/404\/?$/)||m.match(/^\/offline-plugin-app-shell-fallback\/?$/))&&(0,u.navigate)(""+m+g.search+g.hash,{replace:!0}),d.jN.loadPage(g.pathname).then((function(t){if(!t||t.status===d.uQ.Error){var e="page resources for "+g.pathname+" not found. Not rendering React";if(t&&t.error)throw console.error(e),t.error;throw new Error(e)}window.___webpackCompilationHash=t.page.webpackCompilationHash;var n=(0,a.h)("wrapRootElement",{element:(0,y.tZ)(h,null)},(0,y.tZ)(h,null),(function(t){return{element:t.result}})).pop(),r=function(){return(0,y.tZ)(l,null,n)},o=(0,a.h)("replaceHydrateFunction",void 0,s.hydrate)[0];f()((function(){o((0,y.tZ)(r,null),"undefined"!=typeof window?document.getElementById("___gatsby"):void 0,(function(){(0,a.h)("onInitialClientRender")}))}))}))}))},5910:function(t,e,n){"use strict";n.r(e);var r=n(2784),o=n(9930),a=n(5672);e.default=function(t){var e=t.location,n=o.ZP.loadPageSync(e.pathname);return n?r.createElement(a.Z,Object.assign({location:e,pageResources:n},n.json)):null}},1553:function(t,e,n){var r;t.exports=(r=n(5910))&&r.default||r},9750:function(t,e){e.O=function(t){return t}},1412:function(t,e,n){"use strict";n.r(e);var r=n(1625);"https:"!==window.location.protocol&&"localhost"!==window.location.hostname?console.error("Service workers can only be used over HTTPS, or on localhost for development"):"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then((function(t){t.addEventListener("updatefound",(function(){(0,r.h)("onServiceWorkerUpdateFound",{serviceWorker:t});var e=t.installing;console.log("installingWorker",e),e.addEventListener("statechange",(function(){switch(e.state){case"installed":navigator.serviceWorker.controller?(window.___swUpdated=!0,(0,r.h)("onServiceWorkerUpdateReady",{serviceWorker:t}),window.___failedResources&&(console.log("resources failed, SW updated - reloading"),window.location.reload())):(console.log("Content is now available offline!"),(0,r.h)("onServiceWorkerInstalled",{serviceWorker:t}));break;case"redundant":console.error("The installing service worker became redundant."),(0,r.h)("onServiceWorkerRedundant",{serviceWorker:t});break;case"activated":(0,r.h)("onServiceWorkerActive",{serviceWorker:t})}}))}))})).catch((function(t){console.error("Error during service worker registration:",t)}))},7272:function(t,e,n){"use strict";function r(t,e){return void 0===e&&(e=""),e?t===e?"/":t.startsWith(e+"/")?t.slice(e.length):t:t}n.d(e,{Z:function(){return r}})},7630:function(t,e,n){"use strict";n.r(e)},1387:function(t,e,n){"use strict";n.r(e),n.d(e,{BaseContext:function(){return N},Link:function(){return Q},Location:function(){return T},LocationProvider:function(){return M},Match:function(){return X},Redirect:function(){return Y},Router:function(){return U},ServerLocation:function(){return $},createHistory:function(){return x},createMemorySource:function(){return P},globalHistory:function(){return _},isRedirect:function(){return B},matchPath:function(){return c},navigate:function(){return C},redirectTo:function(){return K},useLocation:function(){return tt},useMatch:function(){return rt},useNavigate:function(){return et},useParams:function(){return nt}});var r=n(2784),o=n(7677),a=n.n(o),i=n(9750),s=function(t,e){return t.substr(0,e.length)===e},u=function(t,e){for(var n=void 0,r=void 0,o=e.split("?")[0],i=g(o),s=""===i[0],u=m(t),c=0,l=u.length;ce.score?-1:t.index-e.index}))},g=function(t){return t.replace(/(^\/+|\/+$)/g,"").split("/")},y=function(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0})))&&n.length>0?"?"+n.join("&"):"")},w=["uri","path"],b=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},s=i.state,u=i.replace,c=void 0!==u&&u;if("number"==typeof e)t.history.go(e);else{s=b({},s,{key:Date.now()+""});try{o||c?t.history.replaceState(s,null,e):t.history.pushState(s,null,e)}catch(f){t.location[c?"replace":"assign"](e)}}r=S(t),o=!0;var l=new Promise((function(t){return a=t}));return n.forEach((function(t){return t({location:r,action:"PUSH"})})),l}}},P=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",e=t.indexOf("?"),n={pathname:e>-1?t.substr(0,e):t,search:e>-1?t.substr(e):""},r=0,o=[n],a=[null];return{get location(){return o[r]},addEventListener:function(t,e){},removeEventListener:function(t,e){},history:{get entries(){return o},get index(){return r},get state(){return a[r]},pushState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;r++,o.push({pathname:s,search:c.length?"?"+c:c}),a.push(t)},replaceState:function(t,e,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;o[r]={pathname:s,search:c},a[r]=t},go:function(t){var e=r+t;e<0||e>a.length-1||(r=e)}}}},k=!("undefined"==typeof window||!window.document||!window.document.createElement),_=x(k?window:P()),C=_.navigate,E=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function O(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function j(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function L(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var A=function(t,e){var n=(0,r.createContext)(e);return n.displayName=t,n},D=A("Location"),T=function(t){var e=t.children;return r.createElement(D.Consumer,null,(function(t){return t?e(t):r.createElement(M,null,e)}))},M=function(t){function e(){var n,r;O(this,e);for(var o=arguments.length,a=Array(o),i=0;i-1?(a=e.substring(0,o),i=e.substring(o)):a=e,r.createElement(D.Provider,{value:{location:{pathname:a,search:i,hash:""},navigate:function(){throw new Error("You can't call navigate on the server.")}}},n)},N=A("Base",{baseuri:"/",basepath:"/",navigate:_.navigate}),U=function(t){return r.createElement(N.Consumer,null,(function(e){return r.createElement(T,null,(function(n){return r.createElement(I,E({},e,n,t))}))}))},I=function(t){function e(){return O(this,e),j(this,t.apply(this,arguments))}return L(e,t),e.prototype.render=function(){var t=this.props,e=t.location,n=t.navigate,o=t.basepath,a=t.primary,i=t.children,s=(t.baseuri,t.component),c=void 0===s?"div":s,f=R(t,["location","navigate","basepath","primary","children","baseuri","component"]),p=r.Children.toArray(i).reduce((function(t,e){var n=at(o)(e);return t.concat(n)}),[]),d=e.pathname,h=u(p,d);if(h){var v=h.params,m=h.uri,g=h.route,y=h.route.value;o=g.default?o:g.path.replace(/\*$/,"");var w=E({},v,{uri:m,location:e,navigate:function(t,e){return n(l(t,m),e)}}),b=r.cloneElement(y,w,y.props.children?r.createElement(U,{location:e,primary:a},y.props.children):void 0),S=a?F:c,x=a?E({uri:m,location:e,component:c},f):f;return r.createElement(N.Provider,{value:{baseuri:m,basepath:o,navigate:w.navigate}},r.createElement(S,x,b))}return null},e}(r.PureComponent);I.defaultProps={primary:!0};var Z=A("Focus"),F=function(t){var e=t.uri,n=t.location,o=t.component,a=R(t,["uri","location","component"]);return r.createElement(Z.Consumer,null,(function(t){return r.createElement(H,E({},a,{component:o,requestFocus:t,uri:e,location:n}))}))},W=!0,q=0,H=function(t){function e(){var n,r;O(this,e);for(var o=arguments.length,a=Array(o),i=0;i= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n * ie10 fix - Mikael Kristiansson 2019\n */\n!(function(name, definition) {\n if (typeof module != \"undefined\") module.exports = definition();\n else if (typeof define == \"function\" && typeof define.amd == \"object\")\n define(definition);\n else this[name] = definition();\n})(\"domready\", function() {\n var ie10 = false;\n if (navigator.appVersion.indexOf(\"MSIE 10\") !== -1) {\n ie10 = true;\n }\n\n var fns = [],\n listener,\n doc = typeof document === \"object\" && document,\n hack = ie10\n ? doc.documentElement.doScroll(\"left\")\n : doc.documentElement.doScroll,\n domContentLoaded = \"DOMContentLoaded\",\n loaded =\n doc && (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState);\n\n if (!loaded && doc)\n doc.addEventListener(\n domContentLoaded,\n (listener = function() {\n doc.removeEventListener(domContentLoaded, listener);\n loaded = 1;\n while ((listener = fns.shift())) listener();\n })\n );\n\n return function(fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn);\n };\n});\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs;\n/**\n * @param {number}\n * @return {string}\n */\n\nexport var from = String.fromCharCode;\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\n\nexport function hash(value, length) {\n return (((length << 2 ^ charat(value, 0)) << 2 ^ charat(value, 1)) << 2 ^ charat(value, 2)) << 2 ^ charat(value, 3);\n}\n/**\n * @param {string} value\n * @return {string}\n */\n\nexport function trim(value) {\n return value.trim();\n}\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\n\nexport function match(value, pattern) {\n return (value = pattern.exec(value)) ? value[0] : value;\n}\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\n\nexport function replace(value, pattern, replacement) {\n return value.replace(pattern, replacement);\n}\n/**\n * @param {string} value\n * @param {string} value\n * @return {number}\n */\n\nexport function indexof(value, search) {\n return value.indexOf(search);\n}\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\n\nexport function charat(value, index) {\n return value.charCodeAt(index) | 0;\n}\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\n\nexport function substr(value, begin, end) {\n return value.slice(begin, end);\n}\n/**\n * @param {string} value\n * @return {number}\n */\n\nexport function strlen(value) {\n return value.length;\n}\n/**\n * @param {any[]} value\n * @return {number}\n */\n\nexport function sizeof(value) {\n return value.length;\n}\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\n\nexport function append(value, array) {\n return array.push(value), value;\n}\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\n\nexport function combine(array, callback) {\n return array.map(callback).join('');\n}","import { from, trim, charat, strlen, substr, append } from './Utility.js';\nexport var line = 1;\nexport var column = 1;\nexport var length = 0;\nexport var position = 0;\nexport var character = 0;\nexport var characters = '';\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string} type\n * @param {string[]} props\n * @param {object[]} children\n * @param {number} length\n */\n\nexport function node(value, root, parent, type, props, children, length) {\n return {\n value: value,\n root: root,\n parent: parent,\n type: type,\n props: props,\n children: children,\n line: line,\n column: column,\n length: length,\n return: ''\n };\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {string} type\n */\n\nexport function copy(value, root, type) {\n return node(value, root.root, root.parent, type, root.props, root.children, 0);\n}\n/**\n * @return {number}\n */\n\nexport function char() {\n return character;\n}\n/**\n * @return {number}\n */\n\nexport function prev() {\n character = position > 0 ? charat(characters, --position) : 0;\n if (column--, character === 10) column = 1, line--;\n return character;\n}\n/**\n * @return {number}\n */\n\nexport function next() {\n character = position < length ? charat(characters, position++) : 0;\n if (column++, character === 10) column = 1, line++;\n return character;\n}\n/**\n * @return {number}\n */\n\nexport function peek() {\n return charat(characters, position);\n}\n/**\n * @return {number}\n */\n\nexport function caret() {\n return position;\n}\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\n\nexport function slice(begin, end) {\n return substr(characters, begin, end);\n}\n/**\n * @param {number} type\n * @return {number}\n */\n\nexport function token(type) {\n switch (type) {\n // \\0 \\t \\n \\r \\s whitespace token\n case 0:\n case 9:\n case 10:\n case 13:\n case 32:\n return 5;\n // ! + , / > @ ~ isolate token\n\n case 33:\n case 43:\n case 44:\n case 47:\n case 62:\n case 64:\n case 126: // ; { } breakpoint token\n\n case 59:\n case 123:\n case 125:\n return 4;\n // : accompanied token\n\n case 58:\n return 3;\n // \" ' ( [ opening delimit token\n\n case 34:\n case 39:\n case 40:\n case 91:\n return 2;\n // ) ] closing delimit token\n\n case 41:\n case 93:\n return 1;\n }\n\n return 0;\n}\n/**\n * @param {string} value\n * @return {any[]}\n */\n\nexport function alloc(value) {\n return line = column = 1, length = strlen(characters = value), position = 0, [];\n}\n/**\n * @param {any} value\n * @return {any}\n */\n\nexport function dealloc(value) {\n return characters = '', value;\n}\n/**\n * @param {number} type\n * @return {string}\n */\n\nexport function delimit(type) {\n return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)));\n}\n/**\n * @param {string} value\n * @return {string[]}\n */\n\nexport function tokenize(value) {\n return dealloc(tokenizer(alloc(value)));\n}\n/**\n * @param {number} type\n * @return {string}\n */\n\nexport function whitespace(type) {\n while (character = peek()) {\n if (character < 33) next();else break;\n }\n\n return token(type) > 2 || token(character) > 3 ? '' : ' ';\n}\n/**\n * @param {string[]} children\n * @return {string[]}\n */\n\nexport function tokenizer(children) {\n while (next()) {\n switch (token(character)) {\n case 0:\n append(identifier(position - 1), children);\n break;\n\n case 2:\n append(delimit(character), children);\n break;\n\n default:\n append(from(character), children);\n }\n }\n\n return children;\n}\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\n\nexport function escaping(index, count) {\n while (--count && next()) {\n // not 0-9 A-F a-f\n if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break;\n }\n\n return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32));\n}\n/**\n * @param {number} type\n * @return {number}\n */\n\nexport function delimiter(type) {\n while (next()) {\n switch (character) {\n // ] ) \" '\n case type:\n return position;\n // \" '\n\n case 34:\n case 39:\n return delimiter(type === 34 || type === 39 ? type : character);\n // (\n\n case 40:\n if (type === 41) delimiter(type);\n break;\n // \\\n\n case 92:\n next();\n break;\n }\n }\n\n return position;\n}\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\n\nexport function commenter(type, index) {\n while (next()) {\n // //\n if (type + character === 47 + 10) break; // /*\n else if (type + character === 42 + 42 && peek() === 47) break;\n }\n\n return '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next());\n}\n/**\n * @param {number} index\n * @return {string}\n */\n\nexport function identifier(index) {\n while (!token(peek())) {\n next();\n }\n\n return slice(index, position);\n}","export var MS = '-ms-';\nexport var MOZ = '-moz-';\nexport var WEBKIT = '-webkit-';\nexport var COMMENT = 'comm';\nexport var RULESET = 'rule';\nexport var DECLARATION = 'decl';\nexport var PAGE = '@page';\nexport var MEDIA = '@media';\nexport var IMPORT = '@import';\nexport var CHARSET = '@charset';\nexport var VIEWPORT = '@viewport';\nexport var SUPPORTS = '@supports';\nexport var DOCUMENT = '@document';\nexport var NAMESPACE = '@namespace';\nexport var KEYFRAMES = '@keyframes';\nexport var FONT_FACE = '@font-face';\nexport var COUNTER_STYLE = '@counter-style';\nexport var FONT_FEATURE_VALUES = '@font-feature-values';","import { IMPORT, COMMENT, RULESET, DECLARATION } from './Enum.js';\nimport { strlen, sizeof } from './Utility.js';\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\n\nexport function serialize(children, callback) {\n var output = '';\n var length = sizeof(children);\n\n for (var i = 0; i < length; i++) {\n output += callback(children[i], i, children, callback) || '';\n }\n\n return output;\n}\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\n\nexport function stringify(element, index, children, callback) {\n switch (element.type) {\n case IMPORT:\n case DECLARATION:\n return element.return = element.return || element.value;\n\n case COMMENT:\n return '';\n\n case RULESET:\n element.value = element.props.join(',');\n }\n\n return strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : '';\n}","import { MS, MOZ, WEBKIT } from './Enum.js';\nimport { hash, charat, strlen, indexof, replace } from './Utility.js';\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\n\nexport function prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}","import { COMMENT, RULESET, DECLARATION } from './Enum.js';\nimport { abs, trim, from, sizeof, strlen, substr, append, replace } from './Utility.js';\nimport { node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter } from './Tokenizer.js';\n/**\n * @param {string} value\n * @return {object[]}\n */\n\nexport function compile(value) {\n return dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value));\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\n\nexport function parse(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n var index = 0;\n var offset = 0;\n var length = pseudo;\n var atrule = 0;\n var property = 0;\n var previous = 0;\n var variable = 1;\n var scanning = 1;\n var ampersand = 1;\n var character = 0;\n var type = '';\n var props = rules;\n var children = rulesets;\n var reference = rule;\n var characters = type;\n\n while (scanning) {\n switch (previous = character, character = next()) {\n // \" ' [ (\n case 34:\n case 39:\n case 91:\n case 40:\n characters += delimit(character);\n break;\n // \\t \\n \\r \\s\n\n case 9:\n case 10:\n case 13:\n case 32:\n characters += whitespace(previous);\n break;\n // \\\n\n case 92:\n characters += escaping(caret() - 1, 7);\n continue;\n // /\n\n case 47:\n switch (peek()) {\n case 42:\n case 47:\n append(comment(commenter(next(), caret()), root, parent), declarations);\n break;\n\n default:\n characters += '/';\n }\n\n break;\n // {\n\n case 123 * variable:\n points[index++] = strlen(characters) * ampersand;\n // } ; \\0\n\n case 125 * variable:\n case 59:\n case 0:\n switch (character) {\n // \\0 }\n case 0:\n case 125:\n scanning = 0;\n // ;\n\n case 59 + offset:\n if (property > 0 && strlen(characters) - length) append(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations);\n break;\n // @ ;\n\n case 59:\n characters += ';';\n // { rule/at-rule\n\n default:\n append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets);\n if (character === 123) if (offset === 0) parse(characters, root, reference, reference, props, rulesets, length, points, children);else switch (atrule) {\n // d m s\n case 100:\n case 109:\n case 115:\n parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children);\n break;\n\n default:\n parse(characters, reference, reference, reference, [''], children, length, points, children);\n }\n }\n\n index = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo;\n break;\n // :\n\n case 58:\n length = 1 + strlen(characters), property = previous;\n\n default:\n if (variable < 1) if (character == 123) --variable;else if (character == 125 && variable++ == 0 && prev() == 125) continue;\n\n switch (characters += from(character), character * variable) {\n // &\n case 38:\n ampersand = offset > 0 ? 1 : (characters += '\\f', -1);\n break;\n // ,\n\n case 44:\n points[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1;\n break;\n // @\n\n case 64:\n // -\n if (peek() === 45) characters += delimit(next());\n atrule = peek(), offset = strlen(type = characters += identifier(caret())), character++;\n break;\n // -\n\n case 45:\n if (previous === 45 && strlen(characters) == 2) variable = 0;\n }\n\n }\n }\n\n return rulesets;\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\n\nexport function ruleset(value, root, parent, index, offset, rules, points, type, props, children, length) {\n var post = offset - 1;\n var rule = offset === 0 ? rules : [''];\n var size = sizeof(rule);\n\n for (var i = 0, j = 0, k = 0; i < index; ++i) {\n for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x) {\n if (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x]))) props[k++] = z;\n }\n }\n\n return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length);\n}\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\n\nexport function comment(value, root, parent) {\n return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0);\n}\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\n\nexport function declaration(value, root, parent, length) {\n return node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length);\n}","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, identifier, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifier(position - 1);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\n\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // .length indicates if this rule contains pseudo or not\n !element.length) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\n\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n {\n container = options.container || document.head;\n Array.prototype.forEach.call(document.querySelectorAll(\"style[data-emotion]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n if (attrib[0] !== key) {\n return;\n } // $FlowFixMe\n\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;","import { MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION } from './Enum.js';\nimport { match, charat, substr, strlen, sizeof, replace, combine } from './Utility.js';\nimport { copy, tokenize } from './Tokenizer.js';\nimport { serialize } from './Serializer.js';\nimport { prefix } from './Prefixer.js';\n/**\n * @param {function[]} collection\n * @return {function}\n */\n\nexport function middleware(collection) {\n var length = sizeof(collection);\n return function (element, index, children, callback) {\n var output = '';\n\n for (var i = 0; i < length; i++) {\n output += collection[i](element, index, children, callback) || '';\n }\n\n return output;\n };\n}\n/**\n * @param {function} callback\n * @return {function}\n */\n\nexport function rulesheet(callback) {\n return function (element) {\n if (!element.root) if (element = element.return) callback(element);\n };\n}\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\n\nexport function prefixer(element, index, children, callback) {\n if (!element.return) switch (element.type) {\n case DECLARATION:\n element.return = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(replace(element.value, '@', '@' + WEBKIT), element, '')], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(replace(value, /:(read-\\w+)/, ':' + MOZ + '$1'), element, '')], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1'), element, ''), copy(replace(value, /:(plac\\w+)/, ':' + MOZ + '$1'), element, ''), copy(replace(value, /:(plac\\w+)/, MS + 'input-$1'), element, '')], callback);\n }\n\n return '';\n });\n }\n}\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\n\nexport function namespace(element) {\n switch (element.type) {\n case RULESET:\n element.props = element.props.map(function (value) {\n return combine(tokenize(value), function (value, index, children) {\n switch (charat(value, 0)) {\n // \\f\n case 12:\n return substr(value, 1, strlen(value));\n // \\0 ( + > ~\n\n case 0:\n case 40:\n case 43:\n case 62:\n case 126:\n return value;\n // :\n\n case 58:\n if (children[++index] === 'global') children[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1);\n // \\s\n\n case 32:\n return index === 1 ? '' : value;\n\n default:\n switch (index) {\n case 0:\n element = value;\n return sizeof(children) > 1 ? '' : value;\n\n case index = sizeof(children) - 1:\n case 2:\n return index === 2 ? value + element + element : value + element;\n\n default:\n return value;\n }\n\n }\n });\n });\n }\n}","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;","import { createContext, forwardRef, useContext, createElement } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\nvar CacheProvider = EmotionCacheContext.Provider;\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, {}, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\n\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\n\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n} // thus we only need to replace what is a valid character for JS, but not for CSS\n\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\n\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type;\n\n if (process.env.NODE_ENV !== 'production') {\n var error = new Error();\n\n if (error.stack) {\n // chrome\n var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z0-9$]+) /);\n\n if (!match) {\n // safari and firefox\n match = error.stack.match(/.*\\n([A-Z][A-Za-z0-9$]+)@/);\n }\n\n if (match) {\n newProps[labelPropName] = sanitizeIdentifier(match[1]);\n }\n }\n }\n\n return newProps;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, typeof cssProp === 'function' || Array.isArray(cssProp) ? useContext(ThemeContext) : undefined);\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n return ele;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };","import { createElement, useContext, useRef, useLayoutEffect } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-4fbd89c5.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-4fbd89c5.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport 'hoist-non-react-statics';\nimport '../isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nvar pkg = {\n name: \"@emotion/react\",\n version: \"11.1.5\",\n main: \"dist/emotion-react.cjs.js\",\n module: \"dist/emotion-react.esm.js\",\n browser: {\n \"./dist/emotion-react.cjs.js\": \"./dist/emotion-react.browser.cjs.js\",\n \"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n },\n types: \"types/index.d.ts\",\n files: [\"src\", \"dist\", \"jsx-runtime\", \"jsx-dev-runtime\", \"isolated-hoist-non-react-statics-do-not-use-this-in-your-code\", \"types/*.d.ts\", \"macro.js\", \"macro.d.ts\", \"macro.js.flow\"],\n sideEffects: false,\n author: \"mitchellhamilton \",\n license: \"MIT\",\n scripts: {\n \"test:typescript\": \"dtslint types\"\n },\n dependencies: {\n \"@babel/runtime\": \"^7.7.2\",\n \"@emotion/cache\": \"^11.1.3\",\n \"@emotion/serialize\": \"^1.0.0\",\n \"@emotion/sheet\": \"^1.0.1\",\n \"@emotion/utils\": \"^1.0.0\",\n \"@emotion/weak-memoize\": \"^0.2.5\",\n \"hoist-non-react-statics\": \"^3.3.1\"\n },\n peerDependencies: {\n \"@babel/core\": \"^7.0.0\",\n react: \">=16.8.0\"\n },\n peerDependenciesMeta: {\n \"@babel/core\": {\n optional: true\n },\n \"@types/react\": {\n optional: true\n }\n },\n devDependencies: {\n \"@babel/core\": \"^7.7.2\",\n \"@emotion/css\": \"11.1.3\",\n \"@emotion/css-prettifier\": \"1.0.0\",\n \"@emotion/server\": \"11.0.0\",\n \"@emotion/styled\": \"11.1.5\",\n \"@types/react\": \"^16.9.11\",\n dtslint: \"^0.3.0\",\n \"html-tag-names\": \"^1.1.2\",\n react: \"16.14.0\",\n \"svg-tag-names\": \"^1.1.1\"\n },\n repository: \"https://github.com/emotion-js/emotion/tree/master/packages/react\",\n publishConfig: {\n access: \"public\"\n },\n \"umd:main\": \"dist/emotion-react.umd.min.js\",\n preconstruct: {\n entrypoints: [\"./index.js\", \"./jsx-runtime.js\", \"./jsx-dev-runtime.js\", \"./isolated-hoist-non-react-statics-do-not-use-this-in-your-code.js\"],\n umdName: \"emotionReact\"\n }\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, typeof styles === 'function' || Array.isArray(styles) ? useContext(ThemeContext) : undefined); // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n var sheetRef = useRef();\n useLayoutEffect(function () {\n var key = cache.key + \"-global\";\n var sheet = new StyleSheet({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n }); // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n sheet.hydrate([node]);\n }\n\n sheetRef.current = sheet;\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useLayoutEffect(function () {\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n var sheet = sheetRef.current;\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.');\n }\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n {\n insertStyles(cache, serialized, false);\n }\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return ele;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var isBrowser = \"object\" !== 'undefined'; // #1727 for some reason Jest evaluates modules twice if some consuming module gets mocked with jest.mock\n\n var isJest = typeof jest !== 'undefined';\n\n if (isBrowser && !isJest) {\n var globalContext = isBrowser ? window : global;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\nexport default unitlessKeys;","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\n\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n before = _this.prepend ? _this.container.firstChild : _this.before;\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-ms-input-placeholder|-moz-read-write|-moz-read-only){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };","var isBrowser = \"object\" !== 'undefined';\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\n\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.globalHistory = globalHistory;\nexports.navigate = navigate;\nexports.createHistory = createHistory;\nexports.createMemorySource = createMemorySource;","\"use strict\";\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = require(\"invariant\");\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? (0, _invariant2.default)(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;","'use strict';\n\nvar preserveCamelCase = function preserveCamelCase(string) {\n var isLastCharLower = false;\n var isLastCharUpper = false;\n var isLastLastCharUpper = false;\n\n for (var i = 0; i < string.length; i++) {\n var character = string[i];\n\n if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n string = string.slice(0, i) + '-' + string.slice(i);\n isLastCharLower = false;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = true;\n i++;\n } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n string = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = false;\n isLastCharLower = true;\n } else {\n isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n }\n }\n\n return string;\n};\n\nvar camelCase = function camelCase(input, options) {\n if (!(typeof input === 'string' || Array.isArray(input))) {\n throw new TypeError('Expected the input to be `string | string[]`');\n }\n\n options = Object.assign({\n pascalCase: false\n }, options);\n\n var postProcess = function postProcess(x) {\n return options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\n };\n\n if (Array.isArray(input)) {\n input = input.map(function (x) {\n return x.trim();\n }).filter(function (x) {\n return x.length;\n }).join('-');\n } else {\n input = input.trim();\n }\n\n if (input.length === 0) {\n return '';\n }\n\n if (input.length === 1) {\n return options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n }\n\n var hasUpperCase = input !== input.toLowerCase();\n\n if (hasUpperCase) {\n input = preserveCamelCase(input);\n }\n\n input = input.replace(/^[_.\\- ]+/, '').toLowerCase().replace(/[_.\\- ]+(\\w|$)/g, function (_, p1) {\n return p1.toUpperCase();\n }).replace(/\\d+(\\w|$)/g, function (m) {\n return m.toUpperCase();\n });\n return postProcess(input);\n};\n\nmodule.exports = camelCase; // TODO: Remove this for the next major release\n\nmodule.exports.default = camelCase;","var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _templateObject = _taggedTemplateLiteral(['', ''], ['', '']);\n\nfunction _taggedTemplateLiteral(strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n/**\n * @class TemplateTag\n * @classdesc Consumes a pipeline of composable transformer plugins and produces a template tag.\n */\n\n\nvar TemplateTag = function () {\n /**\n * constructs a template tag\n * @constructs TemplateTag\n * @param {...Object} [...transformers] - an array or arguments list of transformers\n * @return {Function} - a template tag\n */\n function TemplateTag() {\n var _this = this;\n\n for (var _len = arguments.length, transformers = Array(_len), _key = 0; _key < _len; _key++) {\n transformers[_key] = arguments[_key];\n }\n\n _classCallCheck(this, TemplateTag);\n\n this.tag = function (strings) {\n for (var _len2 = arguments.length, expressions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n expressions[_key2 - 1] = arguments[_key2];\n }\n\n if (typeof strings === 'function') {\n // if the first argument passed is a function, assume it is a template tag and return\n // an intermediary tag that processes the template using the aforementioned tag, passing the\n // result to our tag\n return _this.interimTag.bind(_this, strings);\n }\n\n if (typeof strings === 'string') {\n // if the first argument passed is a string, just transform it\n return _this.transformEndResult(strings);\n } // else, return a transformed end result of processing the template with our tag\n\n\n strings = strings.map(_this.transformString.bind(_this));\n return _this.transformEndResult(strings.reduce(_this.processSubstitutions.bind(_this, expressions)));\n }; // if first argument is an array, extrude it as a list of transformers\n\n\n if (transformers.length > 0 && Array.isArray(transformers[0])) {\n transformers = transformers[0];\n } // if any transformers are functions, this means they are not initiated - automatically initiate them\n\n\n this.transformers = transformers.map(function (transformer) {\n return typeof transformer === 'function' ? transformer() : transformer;\n }); // return an ES2015 template tag\n\n return this.tag;\n }\n /**\n * Applies all transformers to a template literal tagged with this method.\n * If a function is passed as the first argument, assumes the function is a template tag\n * and applies it to the template, returning a template tag.\n * @param {(Function|String|Array)} strings - Either a template tag or an array containing template strings separated by identifier\n * @param {...*} ...expressions - Optional list of substitution values.\n * @return {(String|Function)} - Either an intermediary tag function or the results of processing the template.\n */\n\n\n _createClass(TemplateTag, [{\n key: 'interimTag',\n\n /**\n * An intermediary template tag that receives a template tag and passes the result of calling the template with the received\n * template tag to our own template tag.\n * @param {Function} nextTag - the received template tag\n * @param {Array} template - the template to process\n * @param {...*} ...substitutions - `substitutions` is an array of all substitutions in the template\n * @return {*} - the final processed value\n */\n value: function interimTag(previousTag, template) {\n for (var _len3 = arguments.length, substitutions = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n substitutions[_key3 - 2] = arguments[_key3];\n }\n\n return this.tag(_templateObject, previousTag.apply(undefined, [template].concat(substitutions)));\n }\n /**\n * Performs bulk processing on the tagged template, transforming each substitution and then\n * concatenating the resulting values into a string.\n * @param {Array<*>} substitutions - an array of all remaining substitutions present in this template\n * @param {String} resultSoFar - this iteration's result string so far\n * @param {String} remainingPart - the template chunk after the current substitution\n * @return {String} - the result of joining this iteration's processed substitution with the result\n */\n\n }, {\n key: 'processSubstitutions',\n value: function processSubstitutions(substitutions, resultSoFar, remainingPart) {\n var substitution = this.transformSubstitution(substitutions.shift(), resultSoFar);\n return ''.concat(resultSoFar, substitution, remainingPart);\n }\n /**\n * Iterate through each transformer, applying the transformer's `onString` method to the template\n * strings before all substitutions are processed.\n * @param {String} str - The input string\n * @return {String} - The final results of processing each transformer\n */\n\n }, {\n key: 'transformString',\n value: function transformString(str) {\n var cb = function cb(res, transform) {\n return transform.onString ? transform.onString(res) : res;\n };\n\n return this.transformers.reduce(cb, str);\n }\n /**\n * When a substitution is encountered, iterates through each transformer and applies the transformer's\n * `onSubstitution` method to the substitution.\n * @param {*} substitution - The current substitution\n * @param {String} resultSoFar - The result up to and excluding this substitution.\n * @return {*} - The final result of applying all substitution transformations.\n */\n\n }, {\n key: 'transformSubstitution',\n value: function transformSubstitution(substitution, resultSoFar) {\n var cb = function cb(res, transform) {\n return transform.onSubstitution ? transform.onSubstitution(res, resultSoFar) : res;\n };\n\n return this.transformers.reduce(cb, substitution);\n }\n /**\n * Iterates through each transformer, applying the transformer's `onEndResult` method to the\n * template literal after all substitutions have finished processing.\n * @param {String} endResult - The processed template, just before it is returned from the tag\n * @return {String} - The final results of processing each transformer\n */\n\n }, {\n key: 'transformEndResult',\n value: function transformEndResult(endResult) {\n var cb = function cb(res, transform) {\n return transform.onEndResult ? transform.onEndResult(res) : res;\n };\n\n return this.transformers.reduce(cb, endResult);\n }\n }]);\n\n return TemplateTag;\n}();\n\nexport default TemplateTag;","var defaults = {\n separator: '',\n conjunction: '',\n serial: false\n};\n/**\n * Converts an array substitution to a string containing a list\n * @param {String} [opts.separator = ''] - the character that separates each item\n * @param {String} [opts.conjunction = ''] - replace the last separator with this\n * @param {Boolean} [opts.serial = false] - include the separator before the conjunction? (Oxford comma use-case)\n *\n * @return {Object} - a TemplateTag transformer\n */\n\nvar inlineArrayTransformer = function inlineArrayTransformer() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaults;\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n // only operate on arrays\n if (Array.isArray(substitution)) {\n var arrayLength = substitution.length;\n var separator = opts.separator;\n var conjunction = opts.conjunction;\n var serial = opts.serial; // join each item in the array into a string where each item is separated by separator\n // be sure to maintain indentation\n\n var indent = resultSoFar.match(/(\\n?[^\\S\\n]+)$/);\n\n if (indent) {\n substitution = substitution.join(separator + indent[1]);\n } else {\n substitution = substitution.join(separator + ' ');\n } // if conjunction is set, replace the last separator with conjunction, but only if there is more than one substitution\n\n\n if (conjunction && arrayLength > 1) {\n var separatorIndex = substitution.lastIndexOf(separator);\n substitution = substitution.slice(0, separatorIndex) + (serial ? separator : '') + ' ' + conjunction + substitution.slice(separatorIndex + 1);\n }\n }\n\n return substitution;\n }\n };\n};\n\nexport default inlineArrayTransformer;","function _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\n/**\n * strips indentation from a template literal\n * @param {String} type = 'initial' - whether to remove all indentation or just leading indentation. can be 'all' or 'initial'\n * @return {Object} - a TemplateTag transformer\n */\n\n\nvar stripIndentTransformer = function stripIndentTransformer() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'initial';\n return {\n onEndResult: function onEndResult(endResult) {\n if (type === 'initial') {\n // remove the shortest leading indentation from each line\n var match = endResult.match(/^[^\\S\\n]*(?=\\S)/gm);\n var indent = match && Math.min.apply(Math, _toConsumableArray(match.map(function (el) {\n return el.length;\n })));\n\n if (indent) {\n var regexp = new RegExp('^.{' + indent + '}', 'gm');\n return endResult.replace(regexp, '');\n }\n\n return endResult;\n }\n\n if (type === 'all') {\n // remove all indentation from each line\n return endResult.replace(/^[^\\S\\n]+/gm, '');\n }\n\n throw new Error('Unknown type: ' + type);\n }\n };\n};\n\nexport default stripIndentTransformer;","/**\n * TemplateTag transformer that trims whitespace on the end result of a tagged template\n * @param {String} side = '' - The side of the string to trim. Can be 'start' or 'end' (alternatively 'left' or 'right')\n * @return {Object} - a TemplateTag transformer\n */\nvar trimResultTransformer = function trimResultTransformer() {\n var side = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return {\n onEndResult: function onEndResult(endResult) {\n if (side === '') {\n return endResult.trim();\n }\n\n side = side.toLowerCase();\n\n if (side === 'start' || side === 'left') {\n return endResult.replace(/^\\s*/, '');\n }\n\n if (side === 'end' || side === 'right') {\n return endResult.replace(/\\s*$/, '');\n }\n\n throw new Error('Side not supported: ' + side);\n }\n };\n};\n\nexport default trimResultTransformer;","var splitStringTransformer = function splitStringTransformer(splitBy) {\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n if (splitBy != null && typeof splitBy === 'string') {\n if (typeof substitution === 'string' && substitution.includes(splitBy)) {\n substitution = substitution.split(splitBy);\n }\n } else {\n throw new Error('You need to specify a string character to split by.');\n }\n\n return substitution;\n }\n };\n};\n\nexport default splitStringTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaLists = new TemplateTag(inlineArrayTransformer({\n separator: ','\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaLists;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaListsAnd = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'and'\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaListsAnd;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaListsOr = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'or'\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaListsOr;","var isValidValue = function isValidValue(x) {\n return x != null && !Number.isNaN(x) && typeof x !== 'boolean';\n};\n\nvar removeNonPrintingValuesTransformer = function removeNonPrintingValuesTransformer() {\n return {\n onSubstitution: function onSubstitution(substitution) {\n if (Array.isArray(substitution)) {\n return substitution.filter(isValidValue);\n }\n\n if (isValidValue(substitution)) {\n return substitution;\n }\n\n return '';\n }\n };\n};\n\nexport default removeNonPrintingValuesTransformer;","var replaceSubstitutionTransformer = function replaceSubstitutionTransformer(replaceWhat, replaceWith) {\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n if (replaceWhat == null || replaceWith == null) {\n throw new Error('replaceSubstitutionTransformer requires at least 2 arguments.');\n } // Do not touch if null or undefined\n\n\n if (substitution == null) {\n return substitution;\n } else {\n return substitution.toString().replace(replaceWhat, replaceWith);\n }\n }\n };\n};\n\nexport default replaceSubstitutionTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport splitStringTransformer from '../splitStringTransformer';\nimport removeNonPrintingValuesTransformer from '../removeNonPrintingValuesTransformer';\nvar html = new TemplateTag(splitStringTransformer('\\n'), removeNonPrintingValuesTransformer, inlineArrayTransformer, stripIndentTransformer, trimResultTransformer);\nexport default html;","/**\n * Replaces tabs, newlines and spaces with the chosen value when they occur in sequences\n * @param {(String|RegExp)} replaceWhat - the value or pattern that should be replaced\n * @param {*} replaceWith - the replacement value\n * @return {Object} - a TemplateTag transformer\n */\nvar replaceResultTransformer = function replaceResultTransformer(replaceWhat, replaceWith) {\n return {\n onEndResult: function onEndResult(endResult) {\n if (replaceWhat == null || replaceWith == null) {\n throw new Error('replaceResultTransformer requires at least 2 arguments.');\n }\n\n return endResult.replace(replaceWhat, replaceWith);\n }\n };\n};\n\nexport default replaceResultTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport splitStringTransformer from '../splitStringTransformer';\nimport replaceSubstitutionTransformer from '../replaceSubstitutionTransformer';\nvar safeHtml = new TemplateTag(splitStringTransformer('\\n'), inlineArrayTransformer, stripIndentTransformer, trimResultTransformer, replaceSubstitutionTransformer(/&/g, '&'), replaceSubstitutionTransformer(//g, '>'), replaceSubstitutionTransformer(/\"/g, '"'), replaceSubstitutionTransformer(/'/g, '''), replaceSubstitutionTransformer(/`/g, '`'));\nexport default safeHtml;","import TemplateTag from '../TemplateTag';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLine = new TemplateTag(replaceResultTransformer(/(?:\\n(?:\\s*))+/g, ' '), trimResultTransformer);\nexport default oneLine;","import TemplateTag from '../TemplateTag';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineTrim = new TemplateTag(replaceResultTransformer(/(?:\\n\\s*)/g, ''), trimResultTransformer);\nexport default oneLineTrim;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaLists = new TemplateTag(inlineArrayTransformer({\n separator: ','\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaLists;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaListsOr = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'or'\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaListsOr;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaListsAnd = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'and'\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaListsAnd;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar inlineLists = new TemplateTag(inlineArrayTransformer, stripIndentTransformer, trimResultTransformer);\nexport default inlineLists;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineInlineLists = new TemplateTag(inlineArrayTransformer, replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineInlineLists;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\nexport default stripIndent;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar stripIndents = new TemplateTag(stripIndentTransformer('all'), trimResultTransformer);\nexport default stripIndents;","\"use strict\";\n\nmodule.exports = Object.assign;","'use strict';\n\nvar reactIs = require('react-is');\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nvar b = \"function\" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for(\"react.element\") : 60103,\n d = b ? Symbol.for(\"react.portal\") : 60106,\n e = b ? Symbol.for(\"react.fragment\") : 60107,\n f = b ? Symbol.for(\"react.strict_mode\") : 60108,\n g = b ? Symbol.for(\"react.profiler\") : 60114,\n h = b ? Symbol.for(\"react.provider\") : 60109,\n k = b ? Symbol.for(\"react.context\") : 60110,\n l = b ? Symbol.for(\"react.async_mode\") : 60111,\n m = b ? Symbol.for(\"react.concurrent_mode\") : 60111,\n n = b ? Symbol.for(\"react.forward_ref\") : 60112,\n p = b ? Symbol.for(\"react.suspense\") : 60113,\n q = b ? Symbol.for(\"react.suspense_list\") : 60120,\n r = b ? Symbol.for(\"react.memo\") : 60115,\n t = b ? Symbol.for(\"react.lazy\") : 60116,\n v = b ? Symbol.for(\"react.block\") : 60121,\n w = b ? Symbol.for(\"react.fundamental\") : 60117,\n x = b ? Symbol.for(\"react.responder\") : 60118,\n y = b ? Symbol.for(\"react.scope\") : 60119;\n\nfunction z(a) {\n if (\"object\" === typeof a && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return \"object\" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \"object\" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.withPrefix = withPrefix;\nexports.withAssetPrefix = withAssetPrefix;\nexports.navigate = exports.default = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nvar _utils = require(\"@gatsbyjs/reach-router/lib/utils\");\n\nvar _parsePath = require(\"./parse-path\");\n\nexports.parsePath = _parsePath.parsePath;\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith(\"/\");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith(\"./\") || path.startsWith(\"../\")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : \"/\";\n return \"\" + (base !== null && base !== void 0 && base.endsWith(\"/\") ? base.slice(0, -1) : base) + (path.startsWith(\"/\") ? path : \"/\" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __PATH_PREFIX__ !== \"undefined\" ? __PATH_PREFIX__ : undefined : __PATH_PREFIX__;\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __BASE_PATH__ !== \"undefined\" ? __BASE_PATH__ : undefined : __BASE_PATH__;\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith(\"http://\") && !path.startsWith(\"https://\") && !path.startsWith(\"//\");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it's already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === \"number\") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(\" \"),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== \"undefined\" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty(\"current\")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, [\"to\", \"getProps\", \"onClick\", \"onMouseEnter\", \"activeClassName\", \"activeStyle\", \"innerRef\", \"partiallyActive\", \"state\", \"replace\", \"_location\"]);\n\n if (process.env.NODE_ENV !== \"production\" && !isLocalLink(to)) {\n console.warn(\"External link \" + to + \" was detected in a Link component. Use the Link component only for internal links. See: https://gatsby.dev/internal-links\");\n }\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement(\"a\", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle \"target=_blank\"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.default = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.navigate = navigate;","\"use strict\";\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || \"/\";\n var search = \"\";\n var hash = \"\";\n var hashIndex = pathname.indexOf(\"#\");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf(\"?\");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === \"?\" ? \"\" : search,\n hash: hash === \"#\" ? \"\" : hash\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nexports.ScrollContext = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\n\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sessionStorage = require(\"./session-storage\");\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener(\"scroll\", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n }\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n }\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nvar _react = require(\"react\");\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}","/* eslint-disable no-unused-expressions */\nimport { stripIndent } from \"common-tags\"\nimport camelCase from \"camelcase\"\nimport { IGatsbyImageData } from \".\"\n\nconst DEFAULT_PIXEL_DENSITIES = [0.25, 0.5, 1, 2]\nexport const DEFAULT_BREAKPOINTS = [750, 1080, 1366, 1920]\nexport const EVERY_BREAKPOINT = [\n 320,\n 654,\n 768,\n 1024,\n 1366,\n 1600,\n 1920,\n 2048,\n 2560,\n 3440,\n 3840,\n 4096,\n]\nconst DEFAULT_FLUID_WIDTH = 800\nconst DEFAULT_FIXED_WIDTH = 800\nconst DEFAULT_ASPECT_RATIO = 4 / 3\n\nexport type Fit = \"cover\" | \"fill\" | \"inside\" | \"outside\" | \"contain\"\n\nexport type Layout = \"fixed\" | \"fullWidth\" | \"constrained\"\nexport type ImageFormat = \"jpg\" | \"png\" | \"webp\" | \"avif\" | \"auto\" | \"\"\n\n/**\n * The minimal required reporter, as we don't want to import it from gatsby-cli\n */\nexport interface IReporter {\n warn(message: string): void\n}\n\nexport interface ISharpGatsbyImageArgs {\n layout?: Layout\n formats?: Array\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n }\n jpgOptions?: Record\n pngOptions?: Record\n webpOptions?: Record\n avifOptions?: Record\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array\n breakpoints?: Array\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record\n ) => IImage\n layout?: Layout\n formats?: Array\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record\n breakpoints?: Array\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.substr(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add(sourceMetadata.format)\n }\n\n if (formats.has(`jpg`) && formats.has(`png`)) {\n reporter.warn(\n `[${pluginName}] Specifying both 'jpg' and 'png' formats is not supported. Using 'auto' instead`\n )\n if (sourceMetadata.format === `jpg`) {\n formats.delete(`png`)\n } else {\n formats.delete(`jpg`)\n }\n }\n\n const imageSizes = calculateImageSizes({ ...args, sourceMetadata })\n\n const result: IGatsbyImageData[\"images\"] = {\n sources: [],\n }\n\n let sizes = args.sizes\n if (!sizes) {\n sizes = getSizes(imageSizes.presentationWidth, layout)\n }\n\n formats.forEach(format => {\n const images = imageSizes.sizes\n .map(size => {\n const imageSrc = generateImageSource(\n filename,\n size,\n Math.round(size / imageSizes.aspectRatio),\n format,\n fit,\n options\n )\n if (\n !imageSrc?.width ||\n !imageSrc.height ||\n !imageSrc.src ||\n !imageSrc.format\n ) {\n reporter.warn(\n `[${pluginName}] The resolver for image ${filename} returned an invalid value.`\n )\n return undefined\n }\n return imageSrc\n })\n .filter(Boolean)\n\n if (format === `jpg` || format === `png` || format === `auto`) {\n const unscaled =\n images.find(img => img.width === imageSizes.unscaledWidth) || images[0]\n\n if (unscaled) {\n result.fallback = {\n src: unscaled.src,\n srcSet: getSrcSet(images),\n sizes,\n }\n }\n } else {\n result.sources?.push({\n srcSet: getSrcSet(images),\n sizes,\n type: `image/${format}`,\n })\n }\n })\n\n const imageProps: Partial = {\n images: result,\n layout,\n backgroundColor,\n }\n\n if (placeholderURL) {\n imageProps.placeholder = { fallback: placeholderURL }\n }\n\n switch (layout) {\n case `fixed`:\n imageProps.width = imageSizes.presentationWidth\n imageProps.height = imageSizes.presentationHeight\n break\n\n case `fullWidth`:\n imageProps.width = 1\n imageProps.height = 1 / imageSizes.aspectRatio\n break\n\n case `constrained`:\n imageProps.width = args.width || imageSizes.presentationWidth || 1\n imageProps.height = (imageProps.width || 1) / imageSizes.aspectRatio\n }\n\n return imageProps as IGatsbyImageData\n}\n\nconst dedupeAndSortDensities = (values: Array): Array =>\n Array.from(new Set([1, ...values])).sort(sortNumeric)\n\nexport function calculateImageSizes(args: IImageSizeArgs): IImageSizes {\n const {\n width,\n height,\n filename,\n layout = `constrained`,\n sourceMetadata: imgDimensions,\n reporter = { warn },\n breakpoints = DEFAULT_BREAKPOINTS,\n } = args\n\n // check that all dimensions provided are positive\n const userDimensions = { width, height }\n const erroneousUserDimensions = Object.entries(userDimensions).filter(\n ([_, size]) => typeof size === `number` && size < 1\n )\n if (erroneousUserDimensions.length) {\n throw new Error(\n `Specified dimensions for images must be positive numbers (> 0). Problem dimensions you have are ${erroneousUserDimensions\n .map(dim => dim.join(`: `))\n .join(`, `)}`\n )\n }\n\n if (layout === `fixed`) {\n return fixedImageSizes(args)\n } else if (layout === `constrained`) {\n return responsiveImageSizes(args)\n } else if (layout === `fullWidth`) {\n return responsiveImageSizes({ breakpoints, ...args })\n } else {\n reporter.warn(\n `No valid layout was provided for the image at ${filename}. Valid image layouts are fixed, fullWidth, and constrained. Found ${layout}`\n )\n return {\n sizes: [imgDimensions.width],\n presentationWidth: imgDimensions.width,\n presentationHeight: imgDimensions.height,\n aspectRatio: imgDimensions.width / imgDimensions.height,\n unscaledWidth: imgDimensions.width,\n }\n }\n}\nexport function fixedImageSizes({\n filename,\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n reporter = { warn },\n}: IImageSizeArgs): IImageSizes {\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n if (!width) {\n if (!height) {\n width = DEFAULT_FIXED_WIDTH\n } else {\n width = Math.round(height * aspectRatio)\n }\n } else if (!height) {\n height = Math.round(width / aspectRatio)\n }\n\n const originalWidth = width // will use this for presentationWidth, don't want to lose it\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n\n // If the image is smaller than requested, warn the user that it's being processed as such\n // print out this message with the necessary information before we overwrite it for sizing\n if (isTopSizeOverriden) {\n const fixedDimension = imgDimensions.width < width ? `width` : `height`\n reporter.warn(stripIndent`\n The requested ${fixedDimension} \"${\n fixedDimension === `width` ? width : height\n }px\" for the image ${filename} was larger than the actual image ${fixedDimension} of ${\n imgDimensions[fixedDimension]\n }px. If possible, replace the current image with a larger one.`)\n\n if (fixedDimension === `width`) {\n width = imgDimensions.width\n height = Math.round(width / aspectRatio)\n } else {\n height = imgDimensions.height\n width = height * aspectRatio\n }\n }\n\n const sizes = densities\n .filter(size => size >= 1) // remove smaller densities because fixed images don't need them\n .map(density => Math.round(density * (width as number)))\n .filter(size => size <= imgDimensions.width)\n\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function responsiveImageSizes({\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n breakpoints,\n layout,\n}: IImageSizeArgs): IImageSizes {\n let sizes\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n // Case 1: width of height were passed in, make sure it isn't larger than the actual image\n width = width && Math.min(width, imgDimensions.width)\n height = height && Math.min(height, imgDimensions.height)\n\n // Case 2: neither width or height were passed in, use default size\n if (!width && !height) {\n width = Math.min(DEFAULT_FLUID_WIDTH, imgDimensions.width)\n height = width / aspectRatio\n }\n\n // if it still hasn't been found, calculate width from the derived height.\n // TS isn't smart enough to realise the type for height has been narrowed here\n if (!width) {\n width = (height as number) * aspectRatio\n }\n\n const originalWidth = width\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n if (isTopSizeOverriden) {\n width = imgDimensions.width\n height = imgDimensions.height\n }\n\n width = Math.round(width)\n\n if (breakpoints?.length > 0) {\n sizes = breakpoints.filter(size => size <= imgDimensions.width)\n\n // If a larger breakpoint has been filtered-out, add the actual image width instead\n if (\n sizes.length < breakpoints.length &&\n !sizes.includes(imgDimensions.width)\n ) {\n sizes.push(imgDimensions.width)\n }\n } else {\n sizes = densities.map(density => Math.round(density * (width as number)))\n sizes = sizes.filter(size => size <= imgDimensions.width)\n }\n\n // ensure that the size passed in is included in the final output\n if (layout === `constrained` && !sizes.includes(width)) {\n sizes.push(width)\n }\n sizes = sizes.sort(sortNumeric)\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function getDimensionsAndAspectRatio(\n dimensions,\n options\n): { width: number; height: number; aspectRatio: number } {\n // Calculate the eventual width/height of the image.\n const imageAspectRatio = dimensions.width / dimensions.height\n\n let width = options.width\n let height = options.height\n\n switch (options.fit) {\n case `fill`: {\n width = options.width ? options.width : dimensions.width\n height = options.height ? options.height : dimensions.height\n break\n }\n case `inside`: {\n const widthOption = options.width\n ? options.width\n : Number.MAX_SAFE_INTEGER\n const heightOption = options.height\n ? options.height\n : Number.MAX_SAFE_INTEGER\n\n width = Math.min(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.min(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n case `outside`: {\n const widthOption = options.width ? options.width : 0\n const heightOption = options.height ? options.height : 0\n\n width = Math.max(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.max(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n\n default: {\n if (options.width && !options.height) {\n width = options.width\n height = Math.round(options.width / imageAspectRatio)\n }\n\n if (options.height && !options.width) {\n width = Math.round(options.height * imageAspectRatio)\n height = options.height\n }\n }\n }\n\n return {\n width,\n height,\n aspectRatio: width / height,\n }\n}\n","/* eslint-disable no-unused-expressions */\nimport {\n useState,\n CSSProperties,\n useEffect,\n HTMLAttributes,\n ImgHTMLAttributes,\n ReactEventHandler,\n SetStateAction,\n Dispatch,\n RefObject,\n} from \"react\"\nimport { Node } from \"gatsby\"\nimport { PlaceholderProps } from \"./placeholder\"\nimport { MainImageProps } from \"./main-image\"\nimport type { IGatsbyImageData } from \"./gatsby-image.browser\"\nimport {\n IGatsbyImageHelperArgs,\n generateImageData,\n Layout,\n EVERY_BREAKPOINT,\n IImage,\n ImageFormat,\n} from \"../image-utils\"\nconst imageCache = new Set()\n\n// Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\nexport const hasNativeLazyLoadSupport = (): boolean =>\n typeof HTMLImageElement !== `undefined` &&\n `loading` in HTMLImageElement.prototype\n\nexport function gatsbyImageIsInstalled(): boolean {\n return typeof GATSBY___IMAGE !== `undefined` && GATSBY___IMAGE\n}\n\nexport function storeImageloaded(cacheKey?: string): void {\n if (cacheKey) {\n imageCache.add(cacheKey)\n }\n}\n\nexport function hasImageLoaded(cacheKey: string): boolean {\n return imageCache.has(cacheKey)\n}\nexport type IGatsbyImageDataParent = T & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type FileNode = Node & {\n childImageSharp?: IGatsbyImageDataParent\n}\n\nconst isGatsbyImageData = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageData | any\n): node is IGatsbyImageData =>\n // 🦆 check for a deep prop to be sure this is a valid gatsbyImageData object\n Boolean(node?.images?.fallback?.src)\n\nconst isGatsbyImageDataParent = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent | any\n): node is IGatsbyImageDataParent => Boolean(node?.gatsbyImageData)\n\ntype ImageDataLike = FileNode | IGatsbyImageDataParent | IGatsbyImageData\nexport const getImage = (node: ImageDataLike): IGatsbyImageData | undefined => {\n if (isGatsbyImageData(node)) {\n return node\n }\n if (isGatsbyImageDataParent(node)) {\n return node.gatsbyImageData\n }\n return node?.childImageSharp?.gatsbyImageData\n}\n\nexport const getSrc = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.src\n\nexport const getSrcSet = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.srcSet\n\nexport function getWrapperProps(\n width: number,\n height: number,\n layout: Layout\n): Pick, \"className\" | \"style\"> & {\n \"data-gatsby-image-wrapper\": string\n} {\n const wrapperStyle: CSSProperties = {}\n\n let className = `gatsby-image-wrapper`\n\n // If the plugin isn't installed we need to apply the styles inline\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.position = `relative`\n wrapperStyle.overflow = `hidden`\n }\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n } else if (layout === `constrained`) {\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.display = `inline-block`\n }\n className = `gatsby-image-wrapper gatsby-image-wrapper-constrained`\n }\n\n return {\n className,\n \"data-gatsby-image-wrapper\": ``,\n style: wrapperStyle,\n }\n}\n\nexport async function applyPolyfill(\n ref: RefObject\n): Promise {\n if (!(`objectFitPolyfill` in window)) {\n await import(\n /* webpackChunkName: \"gatsby-plugin-image-objectfit-polyfill\" */ `objectFitPolyfill`\n )\n }\n ;(window as any).objectFitPolyfill(ref.current)\n}\n\nexport interface IUrlBuilderArgs {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs> {\n baseUrl: string\n /**\n * For constrained and fixed images, the size of the image element\n */\n width?: number\n height?: number\n /**\n * If available, pass the source image width and height\n */\n sourceWidth?: number\n sourceHeight?: number\n /**\n * If only one dimension is passed, then this will be used to calculate the other.\n */\n aspectRatio?: number\n layout?: Layout\n /**\n * Returns a URL based on the passed arguments. Should be a pure function\n */\n urlBuilder: (args: IUrlBuilderArgs) => string\n\n /**\n * Should be a data URI\n */\n placeholderURL?: string\n backgroundColor?: string\n /**\n * Used in error messages etc\n */\n pluginName?: string\n\n /**\n * If you do not support auto-format, pass an array of image types here\n */\n formats?: Array\n\n breakpoints?: Array\n\n /**\n * Passed to the urlBuilder function\n */\n options?: OptionsType\n}\n\n/**\n * Use this hook to generate gatsby-plugin-image data in the browser.\n */\nexport function getImageData({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs): IGatsbyImageData {\n if (\n !breakpoints?.length &&\n (props.layout === `fullWidth` || (props.layout as string) === `FULL_WIDTH`)\n ) {\n breakpoints = EVERY_BREAKPOINT\n }\n const generateImageSource = (\n baseUrl: string,\n width: number,\n height?: number,\n format?: ImageFormat\n ): IImage => {\n return {\n width,\n height,\n format,\n src: urlBuilder({ baseUrl, width, height, options, format }),\n }\n }\n\n const sourceMetadata: IGatsbyImageHelperArgs[\"sourceMetadata\"] = {\n width: sourceWidth,\n height: sourceHeight,\n format: `auto`,\n }\n\n const args: IGatsbyImageHelperArgs = {\n ...props,\n pluginName,\n generateImageSource,\n filename: baseUrl,\n formats,\n breakpoints,\n sourceMetadata,\n }\n return generateImageData(args)\n}\n\nexport function getMainProps(\n isLoading: boolean,\n isLoaded: boolean,\n images: IGatsbyImageData[\"images\"],\n loading?: \"eager\" | \"lazy\",\n toggleLoaded?: (loaded: boolean) => void,\n cacheKey?: string,\n ref?: RefObject,\n style: CSSProperties = {}\n): Partial {\n const onLoad: ReactEventHandler = function (e) {\n if (isLoaded) {\n return\n }\n\n storeImageloaded(cacheKey)\n\n const target = e.currentTarget\n const img = new Image()\n img.src = target.currentSrc\n\n if (img.decode) {\n // Decode the image through javascript to support our transition\n img\n .decode()\n .catch(() => {\n // ignore error, we just go forward\n })\n .then(() => {\n toggleLoaded(true)\n })\n } else {\n toggleLoaded(true)\n }\n }\n\n // Polyfill \"object-fit\" if unsupported (mostly IE)\n if (ref?.current && !(`objectFit` in document.documentElement.style)) {\n ref.current.dataset.objectFit = style.objectFit ?? `cover`\n ref.current.dataset.objectPosition = `${style.objectPosition ?? `50% 50%`}`\n applyPolyfill(ref)\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n transform: `translateZ(0)`,\n transition: `opacity 250ms linear`,\n width: `100%`,\n willChange: `opacity`,\n ...style,\n }\n }\n\n const result = {\n ...images,\n loading,\n shouldLoad: isLoading,\n \"data-main-image\": ``,\n style: {\n ...style,\n opacity: isLoaded ? 1 : 0,\n },\n onLoad,\n ref,\n }\n\n return result\n}\n\nexport type PlaceholderImageAttrs = ImgHTMLAttributes &\n Pick & {\n \"data-placeholder-image\"?: string\n }\n\nexport function getPlaceholderProps(\n placeholder: PlaceholderImageAttrs | undefined,\n isLoaded: boolean,\n layout: Layout,\n width?: number,\n height?: number,\n backgroundColor?: string,\n objectFit?: CSSProperties[\"objectFit\"],\n objectPosition?: CSSProperties[\"objectPosition\"]\n): PlaceholderImageAttrs {\n const wrapperStyle: CSSProperties = {}\n\n if (backgroundColor) {\n wrapperStyle.backgroundColor = backgroundColor\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n wrapperStyle.backgroundColor = backgroundColor\n wrapperStyle.position = `relative`\n } else if (layout === `constrained`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n } else if (layout === `fullWidth`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n }\n }\n\n if (objectFit) {\n wrapperStyle.objectFit = objectFit\n }\n\n if (objectPosition) {\n wrapperStyle.objectPosition = objectPosition\n }\n const result: PlaceholderImageAttrs = {\n ...placeholder,\n \"aria-hidden\": true,\n \"data-placeholder-image\": ``,\n style: {\n opacity: isLoaded ? 0 : 1,\n transition: `opacity 500ms linear`,\n ...wrapperStyle,\n },\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n result.style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n width: `100%`,\n }\n }\n\n return result\n}\n\nexport function useImageLoaded(\n cacheKey: string,\n loading: \"lazy\" | \"eager\",\n ref: any\n): {\n isLoaded: boolean\n isLoading: boolean\n toggleLoaded: Dispatch>\n} {\n const [isLoaded, toggleLoaded] = useState(false)\n const [isLoading, toggleIsLoading] = useState(loading === `eager`)\n\n const rAF =\n typeof window !== `undefined` && `requestAnimationFrame` in window\n ? requestAnimationFrame\n : function (cb: TimerHandler): number {\n return setTimeout(cb, 16)\n }\n const cRAF =\n typeof window !== `undefined` && `cancelAnimationFrame` in window\n ? cancelAnimationFrame\n : clearTimeout\n\n useEffect(() => {\n let interval: number\n // @see https://stackoverflow.com/questions/44074747/componentdidmount-called-before-ref-callback/50019873#50019873\n function toggleIfRefExists(): void {\n if (ref.current) {\n if (loading === `eager` && ref.current.complete) {\n storeImageloaded(cacheKey)\n toggleLoaded(true)\n } else {\n toggleIsLoading(true)\n }\n } else {\n interval = rAF(toggleIfRefExists)\n }\n }\n toggleIfRefExists()\n\n return (): void => {\n cRAF(interval)\n }\n }, [])\n\n return {\n isLoading,\n isLoaded,\n toggleLoaded,\n }\n}\n\nexport interface IArtDirectedImage {\n media: string\n image: IGatsbyImageData\n}\n\n/**\n * Generate a Gatsby image data object with multiple, art-directed images that display at different\n * resolutions.\n *\n * @param defaultImage The image displayed when no media query matches.\n * It is also used for all other settings applied to the image, such as width, height and layout.\n * You should pass a className to the component with media queries to adjust the size of the container,\n * as this cannot be adjusted automatically.\n * @param artDirected Array of objects which each contains a `media` string which is a media query\n * such as `(min-width: 320px)`, and the image object to use when that query matches.\n */\nexport function withArtDirection(\n defaultImage: IGatsbyImageData,\n artDirected: Array\n): IGatsbyImageData {\n const { images, placeholder, ...props } = defaultImage\n const output: IGatsbyImageData = {\n ...props,\n images: {\n ...images,\n sources: [],\n },\n placeholder: placeholder && {\n ...placeholder,\n sources: [],\n },\n }\n\n artDirected.forEach(({ media, image }) => {\n if (!media) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(\n \"[gatsby-plugin-image] All art-directed images passed to must have a value set for `media`. Skipping.\"\n )\n }\n return\n }\n\n if (\n image.layout !== defaultImage.layout &&\n process.env.NODE_ENV === `development`\n ) {\n console.warn(\n `[gatsby-plugin-image] Mismatched image layout: expected \"${defaultImage.layout}\" but received \"${image.layout}\". All art-directed images use the same layout as the default image`\n )\n }\n\n output.images.sources.push(\n ...image.images.sources.map(source => {\n return { ...source, media }\n }),\n {\n media,\n srcSet: image.images.fallback.srcSet,\n }\n )\n\n if (!output.placeholder) {\n return\n }\n\n output.placeholder.sources.push({\n media,\n srcSet: image.placeholder.fallback,\n })\n })\n output.images.sources.push(...images.sources)\n if (placeholder?.sources) {\n output.placeholder?.sources.push(...placeholder.sources)\n }\n return output\n}\n","// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \n\nimport React, { Fragment, FunctionComponent } from \"react\"\nimport terserMacro from \"../../macros/terser.macro\"\nimport { Layout } from \"../image-utils\"\n\nexport interface ILayoutWrapperProps {\n layout: Layout\n width: number\n height: number\n}\n\nconst NativeScriptLoading: FunctionComponent = () => (\n \n)\n\nexport function getSizer(\n layout: Layout,\n width: number,\n height: number\n): string {\n let sizer: string | null = null\n if (layout === `fullWidth`) {\n sizer = `
`\n }\n if (layout === `constrained`) {\n sizer = `
\"\"
`\n }\n return sizer\n}\n\nconst Sizer: FunctionComponent = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n
\n )\n }\n if (layout === `constrained`) {\n return (\n
\n \n
\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent = function LayoutWrapper({\n children,\n ...props\n}) {\n return (\n \n \n {children}\n\n {\n // eslint-disable-next-line no-undef\n SERVER && \n }\n \n )\n}\n","/* eslint-disable filenames/match-regex */\nimport React, {\n FunctionComponent,\n ImgHTMLAttributes,\n forwardRef,\n LegacyRef,\n} from \"react\"\nimport * as PropTypes from \"prop-types\"\n\nexport interface IResponsiveImageProps {\n sizes?: string\n srcSet: string\n}\n\nexport type SourceProps = IResponsiveImageProps &\n (\n | {\n media: string\n type?: string\n }\n | {\n media?: string\n type: string\n }\n )\n\ntype FallbackProps = { src: string } & Partial\n\ntype ImageProps = ImgHTMLAttributes & {\n src: string\n alt: string\n shouldLoad: boolean\n innerRef: LegacyRef\n}\n\nexport type PictureProps = ImgHTMLAttributes & {\n fallback?: FallbackProps\n sources?: Array\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n innerRef,\n ...props\n}) {\n return (\n \n )\n}\n\nexport const Picture = forwardRef(\n function Picture(\n { fallback, sources = [], shouldLoad = true, ...props },\n ref\n ) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n \n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n \n {sources.map(({ media, srcSet, type }) => (\n \n ))}\n {fallbackImage}\n \n )\n }\n)\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string,\n shouldLoad: PropTypes.bool,\n}\n\nPicture.displayName = `Picture`\nPicture.propTypes = {\n alt: PropTypes.string.isRequired,\n shouldLoad: PropTypes.bool,\n fallback: PropTypes.exact({\n src: PropTypes.string.isRequired,\n srcSet: PropTypes.string,\n sizes: PropTypes.string,\n }),\n sources: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.exact({\n media: PropTypes.string.isRequired,\n type: PropTypes.string,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n PropTypes.exact({\n media: PropTypes.string,\n type: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n ])\n ),\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\nimport { Picture, SourceProps } from \"./picture\"\n\nexport type PlaceholderProps = ImgHTMLAttributes & {\n fallback?: string\n sources?: Array\n}\n\nexport const Placeholder: FunctionComponent = function Placeholder({\n fallback,\n ...props\n}) {\n if (fallback) {\n return (\n \n )\n } else {\n return
\n }\n}\n\nPlaceholder.displayName = `Placeholder`\nPlaceholder.propTypes = {\n fallback: PropTypes.string,\n sources: Picture.propTypes?.sources,\n alt: function (props, propName, componentName): Error | null {\n if (!props[propName]) {\n return null\n }\n return new Error(\n `Invalid prop \\`${propName}\\` supplied to \\`${componentName}\\`. Validation failed.`\n )\n },\n}\n","import React, { forwardRef } from \"react\"\nimport { Picture, PictureProps } from \"./picture\"\n\nexport type MainImageProps = PictureProps\n\nexport const MainImage = forwardRef(\n function MainImage(props, ref) {\n return (\n <>\n \n \n \n )\n }\n)\n\nMainImage.displayName = `MainImage`\nMainImage.propTypes = Picture.propTypes\n","import React, {\n ElementType,\n FunctionComponent,\n CSSProperties,\n WeakValidationMap,\n} from \"react\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport { getWrapperProps, getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage, MainImageProps } from \"./main-image\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport PropTypes from \"prop-types\"\n\nconst removeNewLines = (str: string): string => str.replace(/\\n/g, ``)\n\nexport const GatsbyImageHydrator: FunctionComponent<{\n as?: ElementType\n style?: CSSProperties\n className?: string\n}> = function GatsbyImageHydrator({ as: Type = `div`, children, ...props }) {\n return {children}\n}\n\nexport const GatsbyImage: FunctionComponent = function GatsbyImage({\n as,\n className,\n class: preactClass,\n style,\n image,\n loading = `lazy`,\n imgClassName,\n imgStyle,\n backgroundColor,\n objectFit,\n objectPosition,\n ...props\n}) {\n if (!image) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n return null\n }\n if (preactClass) {\n className = preactClass\n }\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: placeholderBackgroundColor,\n } = image\n\n const { style: wStyle, className: wClass, ...wrapperProps } = getWrapperProps(\n width,\n height,\n layout\n )\n\n const cleanedImages: IGatsbyImageData[\"images\"] = {\n fallback: undefined,\n sources: [],\n }\n if (images.fallback) {\n cleanedImages.fallback = {\n ...images.fallback,\n srcSet: images.fallback.srcSet\n ? removeNewLines(images.fallback.srcSet)\n : undefined,\n }\n }\n\n if (images.sources) {\n cleanedImages.sources = images.sources.map(source => {\n return {\n ...source,\n srcSet: removeNewLines(source.srcSet),\n }\n })\n }\n\n return (\n \n \n \n\n )}\n // When eager is set we want to start the isLoading state on true (we want to load the img without react)\n {...getMainProps(\n loading === `eager`,\n false,\n cleanedImages,\n loading,\n undefined,\n undefined,\n undefined,\n imgStyle\n )}\n />\n \n \n )\n}\n\nexport const altValidator: PropTypes.Validator = (\n props: GatsbyImageProps,\n propName,\n componentName,\n ...rest\n): Error | undefined => {\n if (!props.alt && props.alt !== ``) {\n return new Error(\n `The \"alt\" prop is required in ${componentName}. If the image is purely presentational then pass an empty string: e.g. alt=\"\". Learn more: https://a11y-style-guide.com/style-guide/section-media.html`\n )\n }\n return PropTypes.string(props, propName, componentName, ...rest)\n}\nexport const propTypes = {\n image: PropTypes.object.isRequired,\n alt: altValidator,\n} as WeakValidationMap\n","/* eslint-disable no-unused-expressions */\nimport React, {\n Component,\n ElementType,\n createRef,\n MutableRefObject,\n FunctionComponent,\n ImgHTMLAttributes,\n RefObject,\n CSSProperties,\n} from \"react\"\nimport {\n getWrapperProps,\n hasNativeLazyLoadSupport,\n storeImageloaded,\n hasImageLoaded,\n gatsbyImageIsInstalled,\n} from \"./hooks\"\nimport { PlaceholderProps } from \"./placeholder\"\nimport { MainImageProps } from \"./main-image\"\nimport { Layout } from \"../image-utils\"\nimport { getSizer } from \"./layout-wrapper\"\nimport { propTypes } from \"./gatsby-image.server\"\nimport { Unobserver } from \"./intersection-observer\"\nimport { render } from \"react-dom\"\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface GatsbyImageProps\n extends Omit<\n ImgHTMLAttributes,\n \"placeholder\" | \"onLoad\" | \"src\" | \"srcSet\" | \"width\" | \"height\"\n > {\n alt: string\n as?: ElementType\n className?: string\n class?: string\n imgClassName?: string\n image: IGatsbyImageData\n imgStyle?: CSSProperties\n backgroundColor?: string\n objectFit?: CSSProperties[\"objectFit\"]\n objectPosition?: CSSProperties[\"objectPosition\"]\n onLoad?: () => void\n onError?: () => void\n onStartLoad?: (props: { wasCached?: boolean }) => void\n}\n\nexport interface IGatsbyImageData {\n layout: Layout\n width: number\n height: number\n backgroundColor?: string\n images: Pick\n placeholder?: Pick\n}\n\nclass GatsbyImageHydrator extends Component<\n GatsbyImageProps,\n { isLoading: boolean; isLoaded: boolean }\n> {\n root: RefObject = createRef<\n HTMLImageElement | undefined\n >()\n hydrated: MutableRefObject = { current: false }\n forceRender: MutableRefObject = {\n // In dev we use render not hydrate, to avoid hydration warnings\n current: process.env.NODE_ENV === `development`,\n }\n lazyHydrator: () => void | null = null\n ref = createRef()\n unobserveRef: Unobserver\n\n constructor(props) {\n super(props)\n\n this.state = {\n isLoading: hasNativeLazyLoadSupport(),\n isLoaded: false,\n }\n }\n\n _lazyHydrate(props, state): Promise {\n const hasSSRHtml = this.root.current.querySelector(\n `[data-gatsby-image-ssr]`\n )\n // On first server hydration do nothing\n if (hasNativeLazyLoadSupport() && hasSSRHtml && !this.hydrated.current) {\n this.hydrated.current = true\n return Promise.resolve()\n }\n\n return import(`./lazy-hydrate`).then(({ lazyHydrate }) => {\n this.lazyHydrator = lazyHydrate(\n {\n image: props.image.images,\n isLoading: state.isLoading,\n isLoaded: state.isLoaded,\n toggleIsLoaded: () => {\n props.onLoad?.()\n\n this.setState({\n isLoaded: true,\n })\n },\n ref: this.ref,\n ...props,\n },\n this.root,\n this.hydrated,\n this.forceRender\n )\n })\n }\n\n /**\n * Choose if setupIntersectionObserver should use the image cache or not.\n */\n _setupIntersectionObserver(useCache = true): void {\n import(`./intersection-observer`).then(({ createIntersectionObserver }) => {\n const intersectionObserver = createIntersectionObserver(() => {\n if (this.root.current) {\n const cacheKey = JSON.stringify(this.props.image.images)\n this.props.onStartLoad?.({\n wasCached: useCache && hasImageLoaded(cacheKey),\n })\n this.setState({\n isLoading: true,\n isLoaded: useCache && hasImageLoaded(cacheKey),\n })\n }\n })\n\n if (this.root.current) {\n this.unobserveRef = intersectionObserver(this.root)\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState): boolean {\n let hasChanged = false\n if (!this.state.isLoading && nextState.isLoading && !nextState.isLoaded) {\n // Props have changed between SSR and hydration, so we need to force render instead of hydrate\n this.forceRender.current = true\n }\n // this check mostly means people do not have the correct ref checks in place, we want to reset some state to suppport loading effects\n if (this.props.image.images !== nextProps.image.images) {\n // reset state, we'll rely on intersection observer to reload\n if (this.unobserveRef) {\n // unregister intersectionObserver\n this.unobserveRef()\n\n // // on unmount, make sure we cleanup\n if (this.hydrated.current && this.lazyHydrator) {\n render(null, this.root.current)\n }\n }\n\n this.setState(\n {\n isLoading: false,\n isLoaded: false,\n },\n () => {\n this._setupIntersectionObserver(false)\n }\n )\n\n hasChanged = true\n }\n\n if (this.root.current && !hasChanged) {\n this._lazyHydrate(nextProps, nextState)\n }\n\n return false\n }\n\n componentDidMount(): void {\n if (this.root.current) {\n const ssrElement = this.root.current.querySelector(\n `[data-gatsby-image-ssr]`\n ) as HTMLImageElement\n const cacheKey = JSON.stringify(this.props.image.images)\n\n // when SSR and native lazyload is supported we'll do nothing ;)\n if (\n hasNativeLazyLoadSupport() &&\n ssrElement &&\n gatsbyImageIsInstalled()\n ) {\n this.props.onStartLoad?.({ wasCached: false })\n\n // When the image is already loaded before we have hydrated, we trigger onLoad and cache the item\n if (ssrElement.complete) {\n this.props.onLoad?.()\n storeImageloaded(cacheKey)\n } else {\n // We need the current class context (this) inside our named onLoad function\n // The named function is necessary to easily remove the listener afterward.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n // add an onLoad to the image\n ssrElement.addEventListener(`load`, function onLoad() {\n ssrElement.removeEventListener(`load`, onLoad)\n\n _this.props.onLoad?.()\n storeImageloaded(cacheKey)\n })\n }\n\n return\n }\n\n // Fallback to custom lazy loading (intersection observer)\n this._setupIntersectionObserver(true)\n }\n }\n\n componentWillUnmount(): void {\n // Cleanup when onmount happens\n if (this.unobserveRef) {\n // unregister intersectionObserver\n this.unobserveRef()\n\n // on unmount, make sure we cleanup\n if (this.hydrated.current && this.lazyHydrator) {\n this.lazyHydrator()\n }\n }\n\n return\n }\n\n render(): JSX.Element {\n const Type = this.props.as || `div`\n const { width, height, layout } = this.props.image\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n let className = this.props.className\n // preact class\n if (this.props.class) {\n className = this.props.class\n }\n\n const sizer = getSizer(layout, width, height)\n\n return (\n \n )\n }\n}\n\nexport const GatsbyImage: FunctionComponent = function GatsbyImage(\n props\n) {\n if (!props.image) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n }\n return null\n }\n\n if (!gatsbyImageIsInstalled()) {\n console.error(\n `[gatsby-plugin-image] You're missing out on some cool performance features. Please add \"gatsby-plugin-image\" to your gatsby-config.js`\n )\n }\n const { className, class: classSafe, backgroundColor, image } = props\n const { width, height, layout } = image\n const propsKey = JSON.stringify([\n width,\n height,\n layout,\n className,\n classSafe,\n backgroundColor,\n ])\n return \n}\n\nGatsbyImage.propTypes = propTypes\n\nGatsbyImage.displayName = `GatsbyImage`\n","import React, { FunctionComponent, ReactElement } from \"react\"\nimport {\n altValidator,\n GatsbyImage as GatsbyImageServer,\n} from \"./gatsby-image.server\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport PropTypes from \"prop-types\"\nimport { ISharpGatsbyImageArgs } from \"../image-utils\"\n\nexport interface IStaticImageProps\n extends Omit,\n Omit {\n src: string\n}\n\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nexport function _getStaticImage(\n GatsbyImage: FunctionComponent\n): React.FC {\n return function StaticImage({\n src,\n __imageData: imageData,\n __error,\n // We extract these because they're not meant to be passed-down to GatsbyImage\n /* eslint-disable @typescript-eslint/no-unused-vars */\n width,\n height,\n aspectRatio,\n tracedSVGOptions,\n placeholder,\n formats,\n quality,\n transformOptions,\n jpgOptions,\n pngOptions,\n webpOptions,\n avifOptions,\n blurredOptions,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...props\n }): ReactElement {\n if (__error) {\n console.warn(__error)\n }\n\n if (imageData) {\n return \n }\n console.warn(`Image not loaded`, src)\n if (!__error && process.env.NODE_ENV === `development`) {\n console.warn(\n `Please ensure that \"gatsby-plugin-image\" is included in the plugins array in gatsby-config.js, and that your version of gatsby is at least 2.24.78`\n )\n }\n return null\n }\n}\n\nconst StaticImage: React.FC<\n IStaticImageProps & IPrivateProps\n> = _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator = (\n props: IStaticImageProps & IPrivateProps,\n propName: keyof IStaticImageProps & IPrivateProps,\n ...rest\n) => {\n if (\n props.layout === `fullWidth` &&\n (propName === `width` || propName === `height`) &&\n props[propName]\n ) {\n return new Error(\n `\"${propName}\" ${props[propName]} may not be passed when layout is fullWidth.`\n )\n }\n return PropTypes.number(props, propName, ...rest)\n}\n\nconst validLayouts = new Set([`fixed`, `fullWidth`, `constrained`])\n\nexport const propTypes = {\n src: PropTypes.string.isRequired,\n alt: altValidator,\n width: checkDimensionProps,\n height: checkDimensionProps,\n sizes: PropTypes.string,\n layout: (props: IStaticImageProps & IPrivateProps): Error | undefined => {\n if (props.layout === undefined) {\n return undefined\n }\n if (validLayouts.has(props.layout)) {\n return undefined\n }\n\n return new Error(\n `Invalid value ${props.layout}\" provided for prop \"layout\". Defaulting to \"constrained\". Valid values are \"fixed\", \"fullWidth\" or \"constrained\".`\n )\n },\n}\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import {\n GatsbyImage as GatsbyImageBrowser,\n IGatsbyImageData,\n} from \"./gatsby-image.browser\"\nimport React from \"react\"\nimport {\n _getStaticImage,\n propTypes,\n IStaticImageProps,\n} from \"./static-image.server\"\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nconst StaticImage: React.FC<\n IStaticImageProps & IPrivateProps\n> = _getStaticImage(GatsbyImageBrowser)\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import * as React from \"react\"\nexport function LaterHydrator({\n children,\n}: React.PropsWithChildren>): React.ReactNode {\n React.useEffect(() => {\n // eslint-disable-next-line no-unused-expressions\n import(`./lazy-hydrate`)\n }, [])\n\n return children\n}\n","import React from \"react\"\nimport { LaterHydrator } from \".\"\n\nexport function wrapRootElement({ element }) {\n return {element}\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _gatsby = require(\"gatsby\");\n\nvar _getManifestPathname = _interopRequireDefault(require(\"./get-manifest-pathname\"));\n\n/* global __MANIFEST_PLUGIN_HAS_LOCALISATION__ */\n// when we don't have localisation in our manifest, we tree shake everything away\nif (__MANIFEST_PLUGIN_HAS_LOCALISATION__) {\n exports.onRouteUpdate = function (_ref, pluginOptions) {\n var location = _ref.location;\n var localize = pluginOptions.localize;\n var manifestFilename = (0, _getManifestPathname.default)(location.pathname, localize);\n var manifestEl = document.head.querySelector(\"link[rel=\\\"manifest\\\"]\");\n\n if (manifestEl) {\n manifestEl.setAttribute(\"href\", (0, _gatsby.withPrefix)(manifestFilename));\n }\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\n/**\n * Get a manifest filename depending on localized pathname\n *\n * @param {string} pathname\n * @param {Array<{start_url: string, lang: string}>} localizedManifests\n * @return string\n */\nvar _default = function _default(pathname, localizedManifests) {\n var defaultFilename = \"manifest.webmanifest\";\n\n if (!Array.isArray(localizedManifests)) {\n return defaultFilename;\n }\n\n var localizedManifest = localizedManifests.find(function (app) {\n return pathname.startsWith(app.start_url);\n });\n\n if (!localizedManifest) {\n return defaultFilename;\n }\n\n return \"manifest_\" + localizedManifest.lang + \".webmanifest\";\n};\n\nexports.default = _default;","// prefer default export if available\nconst preferDefault = m => (m && m.default) || m\n\nexports.components = {\n \"component---src-pages-404-tsx\": () => import(\"./../../../src/pages/404.tsx\" /* webpackChunkName: \"component---src-pages-404-tsx\" */),\n \"component---src-pages-index-tsx\": () => import(\"./../../../src/pages/index.tsx\" /* webpackChunkName: \"component---src-pages-index-tsx\" */)\n}\n\n","module.exports = [{\n plugin: require('../../../node_modules/gatsby-plugin-image/gatsby-browser.js'),\n options: {\"plugins\":[]},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-manifest/gatsby-browser.js'),\n options: {\"plugins\":[],\"background_color\":\"#000000\",\"icon\":\"src/images/icon.png\",\"legacy\":true,\"theme_color_in_head\":true,\"cache_busting_mode\":\"query\",\"crossOrigin\":\"anonymous\",\"include_favicon\":true,\"cacheDigest\":\"7df75940c5c4611dd59c4b1856069d9e\"},\n },{\n plugin: require('../gatsby-browser.js'),\n options: {\"plugins\":[]},\n }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst {\n getResourceURLsForPathname,\n loadPage,\n loadPageSync,\n} = require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","export default path => {\n if (path === undefined) {\n return path\n }\n if (path === `/`) {\n return `/`\n }\n if (path.charAt(path.length - 1) === `/`) {\n return path.slice(0, -1)\n }\n return path\n}\n","import { pick } from \"@gatsbyjs/reach-router/lib/utils\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n const pathname = decodeURIComponent(rawPathname)\n // Remove the pathPrefix from the pathname.\n const trimmedPathname = stripPrefix(\n pathname,\n decodeURIComponent(__BASE_PATH__)\n )\n // Remove any hashfragment\n .split(`#`)[0]\n // Remove search query\n .split(`?`)[0]\n\n return trimmedPathname\n}\n\nfunction absolutify(path) {\n // If it's already absolute, return as-is\n if (\n path.startsWith(`/`) ||\n path.startsWith(`https://`) ||\n path.startsWith(`http://`)\n ) {\n return path\n }\n // Calculate path relative to current location, adding a trailing slash to\n // match behavior of @reach/router\n return new URL(\n path,\n window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return normalizePagePath(path.route.originalPath)\n }\n\n return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return path.params\n }\n\n return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n if (pathCache.has(trimmedPathname)) {\n return pathCache.get(trimmedPathname)\n }\n\n let foundPath = findMatchPath(trimmedPathname)\n\n if (!foundPath) {\n foundPath = cleanPath(rawPathname)\n }\n\n pathCache.set(trimmedPathname, foundPath)\n\n return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n let foundPath = trimmedPathname\n if (foundPath === `/index.html`) {\n foundPath = `/`\n }\n\n foundPath = normalizePagePath(foundPath)\n\n return foundPath\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport Link, {\n withPrefix,\n withAssetPrefix,\n navigate,\n push,\n replace,\n navigateTo,\n parsePath,\n} from \"gatsby-link\"\nimport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nimport PageRenderer from \"./public-page-renderer\"\nimport loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nconst StaticQueryContext = React.createContext({})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n
\n )\n}\n\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport {\n Link,\n withAssetPrefix,\n withPrefix,\n graphql,\n parsePath,\n navigate,\n useScrollRestoration,\n StaticQueryContext,\n StaticQuery,\n PageRenderer,\n useStaticQuery,\n prefetchPathname,\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","const support = function (feature) {\n if (typeof document === `undefined`) {\n return false\n }\n const fakeLink = document.createElement(`link`)\n try {\n if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n return fakeLink.relList.supports(feature)\n }\n } catch (err) {\n return false\n }\n return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n return new Promise((resolve, reject) => {\n if (typeof document === `undefined`) {\n reject()\n return\n }\n\n const link = document.createElement(`link`)\n link.setAttribute(`rel`, `prefetch`)\n link.setAttribute(`href`, url)\n\n Object.keys(options).forEach(key => {\n link.setAttribute(key, options[key])\n })\n\n link.onload = resolve\n link.onerror = reject\n\n const parentElement =\n document.getElementsByTagName(`head`)[0] ||\n document.getElementsByName(`script`)[0].parentNode\n parentElement.appendChild(link)\n })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(`GET`, url, true)\n\n req.onload = () => {\n if (req.status === 200) {\n resolve()\n } else {\n reject()\n }\n }\n\n req.send(null)\n })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n ? linkPrefetchStrategy\n : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n return new Promise(resolve => {\n if (preFetched[url]) {\n resolve()\n return\n }\n\n supportedPrefetchStrategy(url, options)\n .then(() => {\n resolve()\n preFetched[url] = true\n })\n .catch(() => {}) // 404s are logged to the console anyway\n })\n}\n\nexport default prefetch\n","import prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n /**\n * At least one of critical resources failed to load\n */\n Error: `error`,\n /**\n * Resources loaded successfully\n */\n Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n s = s[0] === `/` ? s.slice(1) : s\n s = s.endsWith(`/`) ? s.slice(0, -1) : s\n return s\n}\n\nconst createPageDataUrl = path => {\n const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json`\n}\n\nfunction doFetch(url, method = `GET`) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(method, url, true)\n req.onreadystatechange = () => {\n if (req.readyState == 4) {\n resolve(req)\n }\n }\n req.send(null)\n })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n if (\n `connection` in navigator &&\n typeof navigator.connection !== `undefined`\n ) {\n if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n return false\n }\n if (navigator.connection.saveData) {\n return false\n }\n }\n return true\n}\n\nconst toPageResources = (pageData, component = null) => {\n const page = {\n componentChunkName: pageData.componentChunkName,\n path: pageData.path,\n webpackCompilationHash: pageData.webpackCompilationHash,\n matchPath: pageData.matchPath,\n staticQueryHashes: pageData.staticQueryHashes,\n }\n\n return {\n component,\n json: pageData.result,\n page,\n }\n}\n\nexport class BaseLoader {\n constructor(loadComponent, matchPaths) {\n // Map of pagePath -> Page. Where Page is an object with: {\n // status: PageResourceStatus.Success || PageResourceStatus.Error,\n // payload: PageResources, // undefined if PageResourceStatus.Error\n // }\n // PageResources is {\n // component,\n // json: pageData.result,\n // page: {\n // componentChunkName,\n // path,\n // webpackCompilationHash,\n // staticQueryHashes\n // },\n // staticQueryResults\n // }\n this.pageDb = new Map()\n this.inFlightDb = new Map()\n this.staticQueryDb = {}\n this.pageDataDb = new Map()\n this.prefetchTriggered = new Set()\n this.prefetchCompleted = new Set()\n this.loadComponent = loadComponent\n setMatchPaths(matchPaths)\n }\n\n inFlightNetworkRequests = new Map()\n\n memoizedGet(url) {\n let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n if (!inFlightPromise) {\n inFlightPromise = doFetch(url, `GET`)\n this.inFlightNetworkRequests.set(url, inFlightPromise)\n }\n\n // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n return inFlightPromise\n .then(response => {\n this.inFlightNetworkRequests.delete(url)\n return response\n })\n .catch(err => {\n this.inFlightNetworkRequests.delete(url)\n throw err\n })\n }\n\n setApiRunner(apiRunner) {\n this.apiRunner = apiRunner\n this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n }\n\n fetchPageDataJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.path === undefined) {\n throw new Error(`not a valid pageData response`)\n }\n\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: jsonPayload,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404 page and it doesn't exist, we're done\n if (pagePath === `/404.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPageDataJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n loadPageDataJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDataDb.has(pagePath)) {\n const pageData = this.pageDataDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPageDataJson({ pagePath }).then(pageData => {\n this.pageDataDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n findMatchPath(rawPath) {\n return findMatchPath(rawPath)\n }\n\n // TODO check all uses of this and whether they use undefined for page resources not exist\n loadPage(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const page = this.pageDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n if (page.error) {\n return {\n error: page.error,\n status: page.status,\n }\n }\n\n return Promise.resolve(page.payload)\n }\n }\n\n if (this.inFlightDb.has(pagePath)) {\n return this.inFlightDb.get(pagePath)\n }\n\n const inFlightPromise = Promise.all([\n this.loadAppData(),\n this.loadPageDataJson(pagePath),\n ]).then(allData => {\n const result = allData[1]\n if (result.status === PageResourceStatus.Error) {\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n let pageData = result.payload\n const { componentChunkName, staticQueryHashes = [] } = pageData\n\n const finalResult = {}\n\n const componentChunkPromise = this.loadComponent(componentChunkName).then(\n component => {\n finalResult.createdAt = new Date()\n let pageResources\n if (!component || component instanceof Error) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = component\n } else {\n finalResult.status = PageResourceStatus.Success\n if (result.notFound === true) {\n finalResult.notFound = true\n }\n pageData = Object.assign(pageData, {\n webpackCompilationHash: allData[0]\n ? allData[0].webpackCompilationHash\n : ``,\n })\n pageResources = toPageResources(pageData, component)\n }\n // undefined if final result is an error\n return pageResources\n }\n )\n\n const staticQueryBatchPromise = Promise.all(\n staticQueryHashes.map(staticQueryHash => {\n // Check for cache in case this static query result has already been loaded\n if (this.staticQueryDb[staticQueryHash]) {\n const jsonPayload = this.staticQueryDb[staticQueryHash]\n return { staticQueryHash, jsonPayload }\n }\n\n return this.memoizedGet(\n `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n )\n .then(req => {\n const jsonPayload = JSON.parse(req.responseText)\n return { staticQueryHash, jsonPayload }\n })\n .catch(() => {\n throw new Error(\n `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n )\n })\n })\n ).then(staticQueryResults => {\n const staticQueryResultsMap = {}\n\n staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n staticQueryResultsMap[staticQueryHash] = jsonPayload\n this.staticQueryDb[staticQueryHash] = jsonPayload\n })\n\n return staticQueryResultsMap\n })\n\n return (\n Promise.all([componentChunkPromise, staticQueryBatchPromise])\n .then(([pageResources, staticQueryResults]) => {\n let payload\n if (pageResources) {\n payload = { ...pageResources, staticQueryResults }\n finalResult.payload = payload\n emitter.emit(`onPostLoadPageResources`, {\n page: payload,\n pageResources: payload,\n })\n }\n\n this.pageDb.set(pagePath, finalResult)\n\n if (finalResult.error) {\n return {\n error: finalResult.error,\n status: finalResult.status,\n }\n }\n\n return payload\n })\n // when static-query fail to load we throw a better error\n .catch(err => {\n return {\n error: err,\n status: PageResourceStatus.Error,\n }\n })\n )\n })\n\n inFlightPromise\n .then(() => {\n this.inFlightDb.delete(pagePath)\n })\n .catch(error => {\n this.inFlightDb.delete(pagePath)\n throw error\n })\n\n this.inFlightDb.set(pagePath, inFlightPromise)\n\n return inFlightPromise\n }\n\n // returns undefined if the page does not exists in cache\n loadPageSync(rawPath, options = {}) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const pageData = this.pageDb.get(pagePath)\n\n if (pageData.payload) {\n return pageData.payload\n }\n\n if (options?.withErrorDetails) {\n return {\n error: pageData.error,\n status: pageData.status,\n }\n }\n }\n return undefined\n }\n\n shouldPrefetch(pagePath) {\n // Skip prefetching if we know user is on slow or constrained connection\n if (!doesConnectionSupportPrefetch()) {\n return false\n }\n\n // Check if the page exists.\n if (this.pageDb.has(pagePath)) {\n return false\n }\n\n return true\n }\n\n prefetch(pagePath) {\n if (!this.shouldPrefetch(pagePath)) {\n return false\n }\n\n // Tell plugins with custom prefetching logic that they should start\n // prefetching this path.\n if (!this.prefetchTriggered.has(pagePath)) {\n this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n this.prefetchTriggered.add(pagePath)\n }\n\n // If a plugin has disabled core prefetching, stop now.\n if (this.prefetchDisabled) {\n return false\n }\n\n const realPath = findPath(pagePath)\n // Todo make doPrefetch logic cacheable\n // eslint-disable-next-line consistent-return\n this.doPrefetch(realPath).then(() => {\n if (!this.prefetchCompleted.has(pagePath)) {\n this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n this.prefetchCompleted.add(pagePath)\n }\n })\n\n return true\n }\n\n doPrefetch(pagePath) {\n const pageDataUrl = createPageDataUrl(pagePath)\n return prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n )\n }\n\n hovering(rawPath) {\n this.loadPage(rawPath)\n }\n\n getResourceURLsForPathname(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDataDb.get(pagePath)\n if (page) {\n const pageResources = toPageResources(page.payload)\n\n return [\n ...createComponentUrls(pageResources.page.componentChunkName),\n createPageDataUrl(pagePath),\n ]\n } else {\n return null\n }\n }\n\n isPageNotFound(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDb.get(pagePath)\n return !page || page.notFound\n }\n\n loadAppData(retries = 0) {\n return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n req => {\n const { status, responseText } = req\n\n let appData\n\n if (status !== 200 && retries < 3) {\n // Retry 3 times incase of non-200 responses\n return this.loadAppData(retries + 1)\n }\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.webpackCompilationHash === undefined) {\n throw new Error(`not a valid app-data response`)\n }\n\n appData = jsonPayload\n } catch (err) {\n // continue regardless of error\n }\n }\n\n return appData\n }\n )\n }\n}\n\nconst createComponentUrls = componentChunkName =>\n (window.___chunkMapping[componentChunkName] || []).map(\n chunk => __PATH_PREFIX__ + chunk\n )\n\nexport class ProdLoader extends BaseLoader {\n constructor(asyncRequires, matchPaths) {\n const loadComponent = chunkName => {\n if (!asyncRequires.components[chunkName]) {\n throw new Error(\n `We couldn't find the correct component chunk with the name ${chunkName}`\n )\n }\n\n return (\n asyncRequires.components[chunkName]()\n .then(preferDefault)\n // loader will handle the case when component is error\n .catch(err => err)\n )\n }\n\n super(loadComponent, matchPaths)\n }\n\n doPrefetch(pagePath) {\n return super.doPrefetch(pagePath).then(result => {\n if (result.status !== PageResourceStatus.Success) {\n return Promise.resolve()\n }\n const pageData = result.payload\n const chunkName = pageData.componentChunkName\n const componentUrls = createComponentUrls(chunkName)\n return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n })\n }\n\n loadPageDataJson(rawPath) {\n return super.loadPageDataJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n instance = _loader\n}\n\nexport const publicLoader = {\n enqueue: rawPath => instance.prefetch(rawPath),\n\n // Real methods\n getResourceURLsForPathname: rawPath =>\n instance.getResourceURLsForPathname(rawPath),\n loadPage: rawPath => instance.loadPage(rawPath),\n // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n loadPageSync: (rawPath, options = {}) =>\n instance.loadPageSync(rawPath, options),\n prefetch: rawPath => instance.prefetch(rawPath),\n isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n hovering: rawPath => instance.hovering(rawPath),\n loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n if (instance) {\n return instance.staticQueryDb\n } else {\n return {}\n }\n}\n","import React, { createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\n\n// Renders page\nclass PageRenderer extends React.Component {\n render() {\n const props = {\n ...this.props,\n params: {\n ...grabMatchParams(this.props.location.pathname),\n ...this.props.pageResources.json.pageContext.__params,\n },\n }\n\n const pageElement = createElement(this.props.pageResources.component, {\n ...props,\n key: this.props.path || this.props.pageResources.page.path,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n { element: pageElement, props },\n pageElement,\n ({ result }) => {\n return { element: result, props }\n }\n ).pop()\n\n return wrappedPage\n }\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport redirects from \"./redirects.json\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport { navigate as reachNavigate } from \"@gatsbyjs/reach-router\"\nimport { globalHistory } from \"@gatsbyjs/reach-router/lib/history\"\nimport { parsePath } from \"gatsby-link\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nfunction maybeRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n\n if (redirect != null) {\n if (process.env.NODE_ENV !== `production`) {\n if (!loader.isPageNotFound(pathname)) {\n console.error(\n `The route \"${pathname}\" matches both a page and a redirect; this is probably not intentional.`\n )\n }\n }\n\n window.___replace(redirect.toPath)\n return true\n } else {\n return false\n }\n}\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n let { pathname } = parsePath(to)\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath\n pathname = parsePath(to).pathname\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n\n // Check for initial page-load redirect\n maybeRedirect(window.location.pathname)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return
\n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onPreRouteUpdate(this.props.location, prevProps.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname, { withErrorDetails: true }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(location.pathname, {\n withErrorDetails: true,\n })\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport domReady from \"@mikaelkristiansson/domready\"\nimport { StaticQueryContext } from \"gatsby\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n return (\n \n \n {children}\n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n \n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). But\n // only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !== browserLoc.pathname &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath === `/404.html` ||\n pagePath.match(/^\\/404\\/?$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(__BASE_PATH__ + pagePath + browserLoc.search + browserLoc.hash, {\n replace: true,\n })\n }\n\n publicLoader.loadPage(browserLoc.pathname).then(page => {\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n window.___webpackCompilationHash = page.page.webpackCompilationHash\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = () => {SiteRoot}\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n ReactDOM.hydrate\n )[0]\n\n domReady(() => {\n renderer(\n ,\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : void 0,\n () => {\n apiRunner(`onInitialClientRender`)\n }\n )\n })\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","exports.polyfill = Component => Component\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","import invariant from \"invariant\"; ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : invariant(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexport { startsWith, pick, match, resolve, insertParams, validateRedirect, shallowCompare };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexport { globalHistory, navigate, createHistory, createMemorySource };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\nimport React, { useContext, createContext } from \"react\";\nimport invariant from \"invariant\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { startsWith, pick, resolve, match, insertParams, validateRedirect, shallowCompare } from \"./lib/utils\";\nimport { globalHistory, navigate, createHistory, createMemorySource } from \"./lib/history\"; ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext(\"Location\"); // sets up a listener if there isn't one already so apps don't need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return React.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : React.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it's ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return React.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === \"function\" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(React.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf(\"?\");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = \"\";\n var hash = \"\";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return React.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error(\"You can't call navigate on the server.\");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext(\"Base\", {\n baseuri: \"/\",\n basepath: \"/\",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return React.createElement(BaseContext.Consumer, null, function (baseContext) {\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RouterImpl, _extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? \"div\" : _props$component,\n domProps = _objectWithoutProperties(_props, [\"location\", \"navigate\", \"basepath\", \"primary\", \"children\", \"baseuri\", \"component\"]);\n\n var routes = React.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, \"\");\n\n var props = _extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = React.cloneElement(element, props, element.props.children ? React.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using 'div' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don't pass any props to 'div'\n\n var wrapperProps = primary ? _extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return React.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, React.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // \"\\n\\t\"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(React.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext(\"Focus\");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, [\"uri\", \"location\", \"component\"]);\n\n return React.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return React.createElement(FocusHandlerImpl, _extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don't focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return _extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return _extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (process.env.NODE_ENV === \"test\") {\n // getting cannot read property focus of null in the tests\n // and that bit of global `initialRender` state causes problems\n // should probably figure it out!\n return;\n }\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? \"div\" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, [\"children\", \"style\", \"requestFocus\", \"component\", \"uri\", \"location\"]);\n\n return React.createElement(Comp, _extends({\n style: _extends({\n outline: \"none\"\n }, style),\n tabIndex: \"-1\",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), React.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(React.Component);\n\npolyfill(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, [\"innerRef\"]);\n\n return React.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return React.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, [\"to\", \"state\", \"replace\", \"getProps\"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return React.createElement(\"a\", _extends({\n ref: ref || innerRef,\n \"aria-current\": isCurrent ? \"page\" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n var _location$state = _extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, [\"key\"]);\n\n shouldReplace = shallowCompare(_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = \"Link\";\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(React.Component);\n\nvar Redirect = function Redirect(props) {\n return React.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RedirectImpl, _extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return React.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return React.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");\n }\n\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === React.Fragment && element.props.children) {\n return React.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \": Children of must have a `path` or `default` prop, or be a ``. None found on element type `\" + element.type + \"`\") : invariant(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" requires both \\\"from\\\" and \\\"to\\\" props when inside a .\") : invariant(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.\") : invariant(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === \"/\" ? basepath : stripSlashes(basepath) + \"/\" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + \"/*\" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\nexport { Link, Location, LocationProvider, Match, Redirect, Router, ServerLocation, createHistory, createMemorySource, isRedirect, navigate, redirectTo, globalHistory, match as matchPath, useLocation, useNavigate, useParams, useMatch , BaseContext };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js b/js/packages/metaplex/public/bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js new file mode 100644 index 0000000..7d5ffc6 --- /dev/null +++ b/js/packages/metaplex/public/bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[218],{6108:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(7560),i=n(2784),o=n(5064),a=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,l=(0,o.Z)((function(e){return a.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),s=n(6806),c=n(2933),u=n(7513),p=l,f=function(e){return"theme"!==e},d=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?p:f},h=function(e,t,n){var r;if(t){var i=t.shouldForwardProp;r=e.__emotion_forwardProp&&i?function(t){return e.__emotion_forwardProp(t)&&i(t)}:i}return"function"!=typeof r&&n&&(r=e.__emotion_forwardProp),r},m=function e(t,n){var o,a,l=t.__emotion_real===t,p=l&&t.__emotion_base||t;void 0!==n&&(o=n.label,a=n.target);var f=h(t,n,l),m=f||d(p),g=!m("as");return function(){var y=arguments,b=l&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==o&&b.push("label:"+o+";"),null==y[0]||void 0===y[0].raw)b.push.apply(b,y);else{0,b.push(y[0][0]);for(var w=y.length,v=1;v=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},X=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},K=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},$=function(e){var t=ne(e,T.TITLE),n=ne(e,N);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=ne(e,_);return t||r||void 0},Q=function(e){return ne(e,V)||function(){}},J=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return Y({},e,t)}),{})},ee=function(e,t){return t.filter((function(e){return void 0!==e[T.BASE]})).map((function(e){return e[T.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),i=0;i=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},re=(a=Date.now(),function(e){var t=Date.now();t-a>16?(a=t,e(t)):setTimeout((function(){re(e)}),0)}),ie=function(e){return clearTimeout(e)},oe="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||re:n.g.requestAnimationFrame||re,ae="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||ie:n.g.cancelAnimationFrame||ie,le=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},se=null,ce=function(e,t){var n=e.baseTag,r=e.bodyAttributes,i=e.htmlAttributes,o=e.linkTags,a=e.metaTags,l=e.noscriptTags,s=e.onChangeClientState,c=e.scriptTags,u=e.styleTags,p=e.title,f=e.titleAttributes;fe(T.BODY,r),fe(T.HTML,i),pe(p,f);var d={baseTag:de(T.BASE,n),linkTags:de(T.LINK,o),metaTags:de(T.META,a),noscriptTags:de(T.NOSCRIPT,l),scriptTags:de(T.SCRIPT,c),styleTags:de(T.STYLE,u)},h={},m={};Object.keys(d).forEach((function(e){var t=d[e],n=t.newTags,r=t.oldTags;n.length&&(h[e]=n),r.length&&(m[e]=d[e].oldTags)})),t&&t(),s(e,h,m)},ue=function(e){return Array.isArray(e)?e.join(""):e},pe=function(e,t){void 0!==e&&document.title!==e&&(document.title=ue(e)),fe(T.TITLE,t)},fe=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(D),i=r?r.split(","):[],o=[].concat(i),a=Object.keys(t),l=0;l=0;p--)n.removeAttribute(o[p]);i.length===o.length?n.removeAttribute(D):n.getAttribute(D)!==a.join(",")&&n.setAttribute(D,a.join(","))}},de=function(e,t){var n=document.head||document.querySelector(T.HEAD),r=n.querySelectorAll(e+"["+"data-react-helmet]"),i=Array.prototype.slice.call(r),o=[],a=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===E)n.innerHTML=t.innerHTML;else if(r===A)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var l=void 0===t[r]?"":t[r];n.setAttribute(r,l)}n.setAttribute(D,"true"),i.some((function(e,t){return a=t,n.isEqualNode(e)}))?i.splice(a,1):o.push(n)})),i.forEach((function(e){return e.parentNode.removeChild(e)})),o.forEach((function(e){return n.appendChild(e)})),{oldTags:i,newTags:o}},he=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},me=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[z[n]||n]=e[n],t}),t)},ge=function(e,t,n){switch(e){case T.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(r={key:e})[D]=!0,i=me(n,r),[o.createElement(T.TITLE,i,e)];var e,n,r,i},toString:function(){return function(e,t,n,r){var i=he(n),o=ue(t);return i?"<"+e+' data-react-helmet="true" '+i+">"+K(o,r)+"":"<"+e+' data-react-helmet="true">'+K(o,r)+""}(e,t.title,t.titleAttributes,n)}};case v:case x:return{toComponent:function(){return me(t)},toString:function(){return he(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var r,i=((r={key:n})[D]=!0,r);return Object.keys(t).forEach((function(e){var n=z[e]||e;if(n===E||n===A){var r=t.innerHTML||t.cssText;i.dangerouslySetInnerHTML={__html:r}}else i[n]=t[e]})),o.createElement(e,i)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var i=Object.keys(r).filter((function(e){return!(e===E||e===A)})).reduce((function(e,t){var i=void 0===r[t]?t:t+'="'+K(r[t],n)+'"';return e?e+" "+i:i}),""),o=r.innerHTML||r.cssText||"",a=-1===F.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+i+(a?"/>":">"+o+"")}),"")}(e,t,n)}}}},ye=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,i=e.htmlAttributes,o=e.linkTags,a=e.metaTags,l=e.noscriptTags,s=e.scriptTags,c=e.styleTags,u=e.title,p=void 0===u?"":u,f=e.titleAttributes;return{base:ge(T.BASE,t,r),bodyAttributes:ge(v,n,r),htmlAttributes:ge(x,i,r),link:ge(T.LINK,o,r),meta:ge(T.META,a,r),noscript:ge(T.NOSCRIPT,l,r),script:ge(T.SCRIPT,s,r),style:ge(T.STYLE,c,r),title:ge(T.TITLE,{title:p,titleAttributes:f},r)}},be=m()((function(e){return{baseTag:ee([S,Z],e),bodyAttributes:J(v,e),defer:ne(e,I),encode:ne(e,R),htmlAttributes:J(x,e),linkTags:te(T.LINK,[M,S],e),metaTags:te(T.META,[P,k,O,H,L],e),noscriptTags:te(T.NOSCRIPT,[E],e),onChangeClientState:Q(e),scriptTags:te(T.SCRIPT,[j,E],e),styleTags:te(T.STYLE,[A],e),title:$(e),titleAttributes:J(C,e)}}),(function(e){se&&ae(se),e.defer?se=oe((function(){ce(e,(function(){se=null}))})):(ce(e),se=null)}),ye)((function(){return null})),we=(l=be,c=s=function(e){function t(){return q(this,t),X(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!y()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case T.SCRIPT:case T.NOSCRIPT:return{innerHTML:t};case T.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,i=e.newChildProps,o=e.nestedChildren;return Y({},r,((t={})[n.type]=[].concat(r[n.type]||[],[Y({},i,this.mapNestedChildrenToProps(n,o))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,i=e.newProps,o=e.newChildProps,a=e.nestedChildren;switch(r.type){case T.TITLE:return Y({},i,((t={})[r.type]=a,t.titleAttributes=Y({},o),t));case T.BODY:return Y({},i,{bodyAttributes:Y({},o)});case T.HTML:return Y({},i,{htmlAttributes:Y({},o)})}return Y({},i,((n={})[r.type]=Y({},o),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=Y({},t);return Object.keys(e).forEach((function(t){var r;n=Y({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return o.Children.forEach(e,(function(e){if(e&&e.props){var i=e.props,o=i.children,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[B[n]||n]=e[n],t}),t)}(G(i,["children"]));switch(n.warnOnInvalidChildren(e,o),e.type){case T.LINK:case T.META:case T.NOSCRIPT:case T.SCRIPT:case T.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:a,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:a,nestedChildren:o})}}})),t=this.mapArrayTypeChildrenToProps(r,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=G(e,["children"]),r=Y({},n);return t&&(r=this.mapChildrenToProps(t,r)),o.createElement(l,r)},W(t,null,[{key:"canUseDOM",set:function(e){l.canUseDOM=e}}]),t}(o.Component),s.propTypes={base:d().object,bodyAttributes:d().object,children:d().oneOfType([d().arrayOf(d().node),d().node]),defaultTitle:d().string,defer:d().bool,encodeSpecialCharacters:d().bool,htmlAttributes:d().object,link:d().arrayOf(d().object),meta:d().arrayOf(d().object),noscript:d().arrayOf(d().object),onChangeClientState:d().func,script:d().arrayOf(d().object),style:d().arrayOf(d().object),title:d().string,titleAttributes:d().object,titleTemplate:d().string},s.defaultProps={defer:!0,encodeSpecialCharacters:!0},s.peek=l.peek,s.rewind=function(){var e=l.rewind();return e||(e=ye({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},c);we.renderStatic=we.rewind;var ve=function(e){var t=e.description,n=e.lang,r=e.title,o=(0,p.useStaticQuery)("3128451518").site,a=t||o.siteMetadata.description;return(0,i.tZ)(we,{htmlAttributes:{lang:n},meta:[{name:"description",content:a},{property:"og:title",content:r},{property:"og:description",content:a},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary"},{name:"twitter:creator",content:o.siteMetadata.author},{name:"twitter:title",content:r},{name:"twitter:description",content:a}],title:r,titleTemplate:"%s | "+o.siteMetadata.title})};ve.defaultProps={lang:"en",keywords:[],meta:[]};var xe=ve;var Ce={name:"31tefj",styles:"*,*::before,*::after{box-sizing:border-box;}:root{-moz-tab-size:4;tab-size:4;}html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0;}body{font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji';}hr{height:0;color:inherit;}abbr[title]{text-decoration:underline dotted;}b,strong{font-weight:bolder;}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,'Liberation Mono',Menlo,monospace;font-size:1em;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}table{text-indent:0;border-color:inherit;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,select{text-transform:none;}button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;}::-moz-focus-inner{border-style:none;padding:0;}:-moz-focusring{outline:1px dotted ButtonText;}:-moz-ui-invalid{box-shadow:none;}legend{padding:0;}progress{vertical-align:baseline;}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto;}[type='search']{-webkit-appearance:textfield;outline-offset:-2px;}::-webkit-search-decoration{-webkit-appearance:none;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}summary{display:list-item;}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0;}button{background-color:transparent;background-image:none;}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color;}fieldset{margin:0;padding:0;}ol,ul{list-style:none;margin:0;padding:0;}html{font-family:Graphik Web,sans-serif;line-height:1.5;}body{font-family:inherit;line-height:inherit;}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb;}hr{border-top-width:1px;}img{border-style:solid;}textarea{resize:vertical;}input::placeholder,textarea::placeholder{color:#9ca3af;}button,[role=\"button\"]{cursor:pointer;}table{border-collapse:collapse;}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;}a{color:inherit;text-decoration:inherit;}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit;}pre,code,kbd,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto;}@keyframes spin{to{transform:rotate(360deg);}}@keyframes ping{75%,100%{transform:scale(2);opacity:0;}}@keyframes pulse{50%{opacity:.5;}}@keyframes bounce{0%,100%{transform:translateY(-25%);animationTimingFunction:cubic-bezier(0.8,0,1,1);}50%{transform:none;animationTimingFunction:cubic-bezier(0,0,0.2,1);}}*{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59, 130, 246, 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;}*{--tw-shadow:0 0 #0000;}"},Te=function(){return(0,i.tZ)(i.xB,{styles:Ce})},ke=(0,r.Z)("div",{target:"ehn6gc11"})({name:"n2kslu",styles:"display:none;position:absolute;top:0px;left:0px;width:100vw;height:100vh;@media (min-width: 768px){display:block;} background:linear-gradient(\n 180deg,\n rgba(255, 255, 255, 0.12) 0%,\n rgba(255, 255, 255, 0) 100%\n ),linear-gradient(294.01deg, rgba(0, 0, 0, 0.12) 0%, rgba(9, 9, 9, 0.12) 100%)"}),Ae=(0,r.Z)("main",{target:"ehn6gc10"})({name:"bjn8wh",styles:"position:relative"}),Se=function(e){var t=e.isHome,n=e.children;return(0,i.tZ)(o.Fragment,null,(0,i.tZ)(xe,{title:"Metaplex"}),(0,i.tZ)(Te,null),(0,i.tZ)(i.xB,{styles:u}),t&&(0,i.tZ)(ke,null),(0,i.tZ)(Ae,null,n))}},629:function(e,t){"use strict";t.Z={md:768}},9720:function(e,t,n){var r=n(2784);function i(e){return r.createElement("svg",e,[r.createElement("path",{d:"M13.8917 16.5793C12.7647 16.5793 11.875 17.5353 11.875 18.7015C11.875 19.8678 12.7845 20.8237 13.8917 20.8237C15.0187 20.8237 15.9084 19.8678 15.9084 18.7015C15.9282 17.5353 15.0187 16.5793 13.8917 16.5793ZM21.1083 16.5793C19.9813 16.5793 19.0916 17.5353 19.0916 18.7015C19.0916 19.8678 20.0011 20.8237 21.1083 20.8237C22.2353 20.8237 23.125 19.8678 23.125 18.7015C23.125 17.5353 22.2353 16.5793 21.1083 16.5793Z",fill:"white",key:0}),r.createElement("path",{d:"M30.9 0.208252H4.1C1.84 0.208252 0 1.9933 0 4.20521V30.4377C0 32.6496 1.84 34.4346 4.1 34.4346H26.78L25.72 30.8451L28.28 33.1541L30.7 35.3272L35 39.0137V4.20521C35 1.9933 33.16 0.208252 30.9 0.208252ZM23.18 25.5482C23.18 25.5482 22.46 24.7139 21.86 23.9766C24.48 23.2587 25.48 21.6677 25.48 21.6677C24.66 22.1915 23.88 22.5602 23.18 22.8124C22.18 23.2199 21.22 23.4915 20.28 23.6467C18.5671 23.9527 16.8104 23.9461 15.1 23.6273C14.0958 23.4367 13.1117 23.1574 12.16 22.793C11.6583 22.6059 11.1705 22.3854 10.7 22.1333C10.64 22.0945 10.58 22.0751 10.52 22.0363C10.48 22.0169 10.46 21.9975 10.44 21.9781C10.08 21.7841 9.88 21.6483 9.88 21.6483C9.88 21.6483 10.84 23.2005 13.38 23.9378C12.78 24.6751 12.04 25.5482 12.04 25.5482C7.62 25.4124 5.94 22.599 5.94 22.599C5.94 16.3513 8.82 11.2872 8.82 11.2872C11.7 9.19171 14.44 9.24992 14.44 9.24992L14.64 9.48275C11.04 10.4917 9.38 12.0245 9.38 12.0245C9.38 12.0245 9.82 11.7917 10.56 11.4618C12.7 10.5499 14.4 10.2977 15.1 10.2395C15.22 10.2201 15.32 10.2007 15.44 10.2007C18.9082 9.74525 22.4354 10.3847 25.5 12.0245C25.5 12.0245 23.92 10.5693 20.52 9.56036L20.8 9.24992C20.8 9.24992 23.54 9.19171 26.42 11.2872C26.42 11.2872 29.3 16.3513 29.3 22.599C29.3 22.599 27.6 25.4124 23.18 25.5482Z",fill:"white",key:1})])}i.defaultProps={width:"35",height:"40",viewBox:"0 0 35 40",fill:"none"},e.exports=i,i.default=i},1778:function(e,t,n){var r=n(2784);function i(e){return r.createElement("svg",e,[r.createElement("path",{d:"M0 33H5.29083V11.1729L17.5897 33H22.0916L34.3904 11.1729V33H39.6813V0H34.4832L19.8638 26.0229L5.19801 0H0V33Z",fill:"white",key:0}),r.createElement("path",{d:"M51.9755 33H72.4427V27.6257H57.2663V19.1871H72.4427V13.8129H57.2663V5.37429H72.4427V0H51.9755V33Z",fill:"white",key:1}),r.createElement("path",{d:"M92.6942 33H97.985V5.37429H110.237V0H80.3953V5.37429H92.6942V33Z",fill:"white",key:2}),r.createElement("path",{d:"M141.86 33H147.661L132.577 0H127.426L112.342 33H118.144L120.743 27.2486H139.214L141.86 33ZM123.202 21.8743L129.978 7.02429L136.754 21.8743H123.202Z",fill:"white",key:3}),r.createElement("path",{d:"M156.823 33H162.114V22.6286H168.936C175.434 22.6286 180.121 17.8671 180.121 11.3143C180.121 4.80857 175.434 0 168.936 0H156.823V33ZM162.114 17.2543V5.37429H168.936C172.37 5.37429 174.83 7.87286 174.83 11.3143C174.83 14.7557 172.37 17.2543 168.936 17.2543H162.114Z",fill:"white",key:4}),r.createElement("path",{d:"M190.125 33H210.871V27.6257H195.416V0H190.125V33Z",fill:"white",key:5}),r.createElement("path",{d:"M220.164 33H240.632V27.6257H225.455V19.1871H240.632V13.8129H225.455V5.37429H240.632V0H220.164V33Z",fill:"white",key:6}),r.createElement("path",{d:"M248.909 33H255.731L265.478 20.79L275.178 33H282L268.866 16.5L282 0H275.224L265.478 12.21L255.731 0H248.909L262.043 16.5L248.909 33Z",fill:"white",key:7})])}i.defaultProps={viewBox:"0 0 282 33",fill:"none"},e.exports=i,i.default=i},2642:function(e,t,n){var r=n(2784);function i(e){return r.createElement("svg",e,r.createElement("path",{d:"M35.4645 7.40561C34.212 7.96061 32.8665 8.33562 31.452 8.50512C32.9115 7.6318 34.0034 6.25731 34.524 4.63812C33.1528 5.4526 31.652 6.02591 30.087 6.33312C29.0346 5.20941 27.6406 4.4646 26.1215 4.21433C24.6024 3.96405 23.0431 4.2223 21.6859 4.94899C20.3286 5.67569 19.2492 6.83016 18.6152 8.23317C17.9813 9.63618 17.8283 11.2092 18.18 12.7081C15.4015 12.5686 12.6834 11.8464 10.2021 10.5885C7.72083 9.33051 5.53176 7.56486 3.777 5.40612C3.177 6.44112 2.832 7.64112 2.832 8.91912C2.83133 10.0696 3.11465 11.2025 3.65682 12.2172C4.19899 13.2319 4.98324 14.0972 5.94 14.7361C4.83042 14.7008 3.74531 14.401 2.775 13.8616V13.9516C2.77489 15.5652 3.33305 17.1292 4.35478 18.3781C5.3765 19.627 6.79886 20.484 8.3805 20.8036C7.35118 21.0822 6.27201 21.1232 5.2245 20.9236C5.67075 22.312 6.54 23.5262 7.71055 24.396C8.88111 25.2659 10.2944 25.7479 11.7525 25.7746C9.27725 27.7177 6.22033 28.7717 3.0735 28.7671C2.51607 28.7673 1.95912 28.7347 1.4055 28.6696C4.59972 30.7234 8.31801 31.8133 12.1155 31.8091C24.9705 31.8091 31.998 21.1621 31.998 11.9281C31.998 11.6281 31.9905 11.3251 31.977 11.0251C33.3439 10.0366 34.5239 8.81246 35.4615 7.41012L35.4645 7.40561Z",fill:"white"}))}i.defaultProps={width:"36",height:"36",viewBox:"0 0 36 36",fill:"none"},e.exports=i,i.default=i}}]); +//# sourceMappingURL=bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js.map b/js/packages/metaplex/public/bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js.map new file mode 100644 index 0000000..f2379cc --- /dev/null +++ b/js/packages/metaplex/public/bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/../node_modules/babel-loader/lib/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/react-fast-compare/index.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/react-side-effect/lib/index.js","webpack://metaplex/./src/constants.ts","webpack://metaplex/./src/components/Header/HeaderLinks.tsx","webpack://metaplex/./src/components/Header/index.tsx","webpack://metaplex/./src/utils/globalStyles.tsx","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/react-helmet/es/Helmet.js","webpack://metaplex/./src/components/SEO.tsx","webpack://metaplex/./src/components/Layout.tsx","webpack://metaplex/./src/styles/breakpoints.ts","webpack://metaplex/./src/images/discord.inline.svg","webpack://metaplex/./src/images/metaplex.inline.svg","webpack://metaplex/./src/images/twitter.inline.svg"],"names":["reactPropsRegex","prop","test","charCodeAt","testOmitPropsOnStringTag","testOmitPropsOnComponent","key","getDefaultShouldForwardProp","tag","composeShouldForwardProps","options","isReal","shouldForwardProp","optionsShouldForwardProp","__emotion_forwardProp","propName","createStyled","identifierName","targetClassName","__emotion_real","baseTag","__emotion_base","undefined","label","target","defaultShouldForwardProp","shouldUseAs","args","arguments","styles","__emotion_styles","slice","push","raw","apply","len","length","i","Styled","w","props","cache","ref","finalTag","as","className","classInterpolations","mergedProps","theme","useContext","T","registered","serialized","concat","name","finalShouldForwardProp","newProps","_key","createElement","displayName","defaultProps","Object","defineProperty","value","withComponent","nextTag","nextOptions","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","equal","a","b","constructor","keys","it","Array","isArray","size","entries","next","done","has","get","RegExp","source","flags","valueOf","prototype","toString","hasOwnProperty","call","$$typeof","module","exports","error","message","match","console","warn","ex","React","React__default","_defineProperty","obj","enumerable","configurable","writable","canUseDOM","window","document","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","Error","WrappedComponent","state","mountedInstances","emitChange","map","instance","SideEffect","_PureComponent","subClass","superClass","this","create","__proto__","peek","rewind","recordedState","_proto","UNSAFE_componentWillMount","componentDidUpdate","componentWillUnmount","index","indexOf","splice","render","PureComponent","getDisplayName","LINKS","LinkBase","href","Link","NavLink","BREAKPOINTS","SocialLink","LogoLink","HeaderNavigation","NavLinkWrapper","id","to","clock","Component","_class","_temp","ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","Symbol","iterator","classCallCheck","Constructor","TypeError","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","assign","objectWithoutProperties","possibleConstructorReturn","self","ReferenceError","encodeSpecialCharacters","str","encode","String","replace","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","join","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","filter","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","lowerCaseAttributeKey","toLowerCase","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","forEach","tagUnion","property","rafPolyfill","Date","now","callback","currentTime","setTimeout","cafPolyfill","clearTimeout","requestAnimationFrame","bind","webkitRequestAnimationFrame","mozRequestAnimationFrame","g","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","_helmetCallback","commitTagChanges","newState","cb","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","title","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","_i","removeAttribute","type","tags","headElement","head","querySelector","tagNodes","querySelectorAll","indexToDelete","newElement","innerHTML","styleSheet","cssText","appendChild","createTextNode","some","existingTag","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","content","dangerouslySetInnerHTML","__html","generateTagsAsReactComponent","attributeHtml","string","tagContent","isSelfClosing","generateTagsAsString","_ref","_ref$title","base","link","meta","noscript","script","style","HelmetSideEffects","defer","HelmetExport","_React$Component","HelmetWrapper","setPrototypeOf","inherits","shouldComponentUpdate","nextProps","mapNestedChildrenToProps","child","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_ref2","_babelHelpers$extends2","_babelHelpers$extends3","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","children","_this2","_child$props","initAttributes","convertReactPropstoHtmlAttributes","_props","set","propTypes","defaultTitle","titleTemplate","mappedState","renderStatic","SEO","description","lang","site","useStaticQuery","metaDescription","siteMetadata","author","keywords","HomeBG","Main","isHome","globalStyles","md","DiscordInline","default","MetaplexInline","TwitterInline"],"mappings":"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","file":"bd73a8745c80610a3eb2227d6d47e80b775bdada-ba4a53a6bf3fdcd9cd50.js","sourcesContent":["import memoize from '@emotion/memoize';\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\nexport default isPropValid;","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\n\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = insertStyles(cache, serialized, typeof finalTag === 'string');\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/createElement(finalTag, newProps);\n return ele;\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n var length, i, keys;\n\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n } // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n\n\n var it;\n\n if (hasMap && a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n }\n\n return true;\n }\n\n if (hasSet && a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n return true;\n } // END: Modifications\n\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n } // END: fast-deep-equal\n // START: react-fast-compare\n // custom handling for DOM elements\n\n\n if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact\n\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n continue;\n } // all other properties should be traversed as usual\n\n\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n } // END: react-fast-compare\n // START: fast-deep-equal\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message || '').match(/stack|recursion/i)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n};","'use strict';\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar React = require('react');\n\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n } // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;","export const LINKS = {\n Home: '/',\n GitHub: 'https://github.com/metaplex-foundation',\n Grants: '/grants',\n Contact: '/contact',\n Twitter: 'https://twitter.com/metaplexNFT',\n Discord: 'https://discord.gg/XznXRVjf',\n};\n","import tw from 'twin.macro';\nimport styled from '@emotion/styled';\nimport { Link } from 'gatsby';\nimport BREAKPOINTS from '../../styles/breakpoints';\n\nconst LinkBase = props => {\n const { href } = props;\n const Element = href ? 'a' : Link;\n\n return ;\n};\n\nexport const NavLink = styled(LinkBase)`\n ${tw`\n first:ml-0\n mt-3 md:my-auto\n border-b-2 border-transparent hover:border-b-2 hover:border-white\n transition duration-300\n `}\n font-size: 1.25rem;\n font-weight: 500;\n line-height: 1.75rem;\n margin-left: 1.75rem;\n @media (min-width: ${BREAKPOINTS.md}px) {\n margin-left: 2.25rem;\n }\n`;\n\nexport const SocialLink = styled(NavLink)`\n ${tw`hidden md:block`}\n svg {\n ${tw`hidden md:block h-5`}\n width: auto;\n height: 36px;\n }\n border: none;\n @media (min-width: ${BREAKPOINTS.md}px) {\n margin-left: 3rem;\n }\n`;\n\nexport const LogoLink = styled(props => )`\n width: 311px;\n @media (min-width: ${BREAKPOINTS.md}px) {\n width: 264px;\n }\n`;\n","import * as React from 'react';\nimport tw from 'twin.macro';\nimport styled from '@emotion/styled';\nimport Metaplex from '../../images/metaplex.inline.svg';\nimport Twitter from '../../images/twitter.inline.svg';\nimport Discord from '../../images/discord.inline.svg';\nimport BREAKPOINTS from '../../styles/breakpoints';\nimport { LINKS } from '../../constants';\nimport { LogoLink, NavLink, SocialLink } from './HeaderLinks';\n\nconst HeaderNavigation = styled.div`\n ${tw`\n block container-2xl\n md:flex md:flex-row flex-wrap\n justify-between content-center\n pl-10 pr-10\n text-white\n bg-transparent\n `}\n padding-top: 2.75rem;\n @media (min-width: ${BREAKPOINTS.md}px) {\n padding-top: 3.75rem;\n }\n`;\n\nconst NavLinkWrapper = tw.div`\nflex flex-row justify-between\nw-full md:w-auto\ntext-lg\nfont-sans uppercase\n`;\n\nconst Header = (): React.ReactElement => {\n return (\n \n \n \n \n\n \n GitHub\n Grants\n Contact\n \n \n \n \n \n \n \n \n );\n};\n\nexport default Header;\n","import tw, { css } from 'twin.macro';\n\nconst globalStyles = css`\n html {\n scroll-behavior: smooth;\n }\n body {\n ${tw`bg-black`}\n }\n h1 {\n ${tw`text-6xl md:text-8xl font-header mb-6`}\n }\n h2 {\n ${tw`text-5xl md:text-6xl font-header mb-4`}\n }\n h3 {\n ${tw`text-3xl md:text-5xl font-header mb-3`}\n }\n h5 {\n ${tw`text-xl font-sans`}\n }\n h6 {\n ${tw`text-xs sm:text-sm font-sans`}\n color: white;\n }\n h6 {\n ${tw`mx-4 my-auto`}\n }\n p {\n ${tw`font-sans mb-6`}\n }\n svg {\n width: 100%;\n height: auto;\n }\n`;\n\nexport default globalStyles;\n","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase(); // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n } // Special case for innerHTML which doesn't work lowercased\n\n\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n }); // Update seen tags with tags from this instance\n\n var keys = Object.keys(instanceSeenTags);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n updateTitle(title, titleAttributes);\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n var addedTags = {};\n var removedTags = {};\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n cb && cb();\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\"); // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps; // assigning into an array to define toString function on it\n\n\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = {\n __html: content\n };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, {\n title: title,\n titleAttributes: titleAttributes\n }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexport default HelmetExport;\nexport { HelmetExport as Helmet };","import * as React from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\nimport { Helmet } from 'react-helmet';\n\ninterface ISEOProps {\n description?: string;\n lang?: string;\n // meta?: [];\n // keywords?: [];\n title?: string;\n}\n\nconst SEO = ({\n description,\n lang,\n // meta = [],\n // keywords = [],\n title,\n}: ISEOProps): React.ReactElement => {\n const { site } = useStaticQuery(graphql`\n query DefaultSEOQuery {\n site {\n siteMetadata {\n title\n description\n author\n }\n }\n }\n `);\n\n const metaDescription = description || site.siteMetadata.description;\n // const currentKeywords =\n // keywords?.length > 0\n // ? {\n // name: `keywords`,\n // content: keywords?.join(`, `),\n // }\n // : {};\n\n return (\n \n );\n};\n\nSEO.defaultProps = {\n lang: `en`,\n keywords: [],\n meta: [],\n};\n\nexport default SEO;\n","import { Global } from '@emotion/react';\nimport * as React from 'react';\nimport tw, { GlobalStyles, styled } from 'twin.macro';\nimport globalStyles from '../utils/globalStyles';\n\nimport SEO from './SEO';\n\ninterface ILayoutProps {\n isHome?: boolean;\n children?: React.ReactNode;\n}\n\nconst HomeBG = styled.div`\n ${tw`\n hidden md:block\n absolute\n top-0\n left-0\n w-screen\n h-screen\n `}\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, 0.12) 0%,\n rgba(255, 255, 255, 0) 100%\n ),\n linear-gradient(294.01deg, rgba(0, 0, 0, 0.12) 0%, rgba(9, 9, 9, 0.12) 100%);\n`;\n\nconst Main = tw.main`\n relative\n`;\n\nconst Layout = ({ isHome, children }: ILayoutProps): React.ReactElement => {\n return (\n <>\n \n \n \n {isHome && }\n
\n {children}\n {/**/}\n
\n \n );\n};\n\nexport default Layout;\n","const BREAKPOINTS = {\n md: 768,\n};\n\nexport default BREAKPOINTS;\n","var React = require('react');\n\nfunction DiscordInline (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"d\":\"M13.8917 16.5793C12.7647 16.5793 11.875 17.5353 11.875 18.7015C11.875 19.8678 12.7845 20.8237 13.8917 20.8237C15.0187 20.8237 15.9084 19.8678 15.9084 18.7015C15.9282 17.5353 15.0187 16.5793 13.8917 16.5793ZM21.1083 16.5793C19.9813 16.5793 19.0916 17.5353 19.0916 18.7015C19.0916 19.8678 20.0011 20.8237 21.1083 20.8237C22.2353 20.8237 23.125 19.8678 23.125 18.7015C23.125 17.5353 22.2353 16.5793 21.1083 16.5793Z\",\"fill\":\"white\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M30.9 0.208252H4.1C1.84 0.208252 0 1.9933 0 4.20521V30.4377C0 32.6496 1.84 34.4346 4.1 34.4346H26.78L25.72 30.8451L28.28 33.1541L30.7 35.3272L35 39.0137V4.20521C35 1.9933 33.16 0.208252 30.9 0.208252ZM23.18 25.5482C23.18 25.5482 22.46 24.7139 21.86 23.9766C24.48 23.2587 25.48 21.6677 25.48 21.6677C24.66 22.1915 23.88 22.5602 23.18 22.8124C22.18 23.2199 21.22 23.4915 20.28 23.6467C18.5671 23.9527 16.8104 23.9461 15.1 23.6273C14.0958 23.4367 13.1117 23.1574 12.16 22.793C11.6583 22.6059 11.1705 22.3854 10.7 22.1333C10.64 22.0945 10.58 22.0751 10.52 22.0363C10.48 22.0169 10.46 21.9975 10.44 21.9781C10.08 21.7841 9.88 21.6483 9.88 21.6483C9.88 21.6483 10.84 23.2005 13.38 23.9378C12.78 24.6751 12.04 25.5482 12.04 25.5482C7.62 25.4124 5.94 22.599 5.94 22.599C5.94 16.3513 8.82 11.2872 8.82 11.2872C11.7 9.19171 14.44 9.24992 14.44 9.24992L14.64 9.48275C11.04 10.4917 9.38 12.0245 9.38 12.0245C9.38 12.0245 9.82 11.7917 10.56 11.4618C12.7 10.5499 14.4 10.2977 15.1 10.2395C15.22 10.2201 15.32 10.2007 15.44 10.2007C18.9082 9.74525 22.4354 10.3847 25.5 12.0245C25.5 12.0245 23.92 10.5693 20.52 9.56036L20.8 9.24992C20.8 9.24992 23.54 9.19171 26.42 11.2872C26.42 11.2872 29.3 16.3513 29.3 22.599C29.3 22.599 27.6 25.4124 23.18 25.5482Z\",\"fill\":\"white\",\"key\":1})]);\n}\n\nDiscordInline.defaultProps = {\"width\":\"35\",\"height\":\"40\",\"viewBox\":\"0 0 35 40\",\"fill\":\"none\"};\n\nmodule.exports = DiscordInline;\n\nDiscordInline.default = DiscordInline;\n","var React = require('react');\n\nfunction MetaplexInline (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"d\":\"M0 33H5.29083V11.1729L17.5897 33H22.0916L34.3904 11.1729V33H39.6813V0H34.4832L19.8638 26.0229L5.19801 0H0V33Z\",\"fill\":\"white\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M51.9755 33H72.4427V27.6257H57.2663V19.1871H72.4427V13.8129H57.2663V5.37429H72.4427V0H51.9755V33Z\",\"fill\":\"white\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M92.6942 33H97.985V5.37429H110.237V0H80.3953V5.37429H92.6942V33Z\",\"fill\":\"white\",\"key\":2}),React.createElement(\"path\",{\"d\":\"M141.86 33H147.661L132.577 0H127.426L112.342 33H118.144L120.743 27.2486H139.214L141.86 33ZM123.202 21.8743L129.978 7.02429L136.754 21.8743H123.202Z\",\"fill\":\"white\",\"key\":3}),React.createElement(\"path\",{\"d\":\"M156.823 33H162.114V22.6286H168.936C175.434 22.6286 180.121 17.8671 180.121 11.3143C180.121 4.80857 175.434 0 168.936 0H156.823V33ZM162.114 17.2543V5.37429H168.936C172.37 5.37429 174.83 7.87286 174.83 11.3143C174.83 14.7557 172.37 17.2543 168.936 17.2543H162.114Z\",\"fill\":\"white\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M190.125 33H210.871V27.6257H195.416V0H190.125V33Z\",\"fill\":\"white\",\"key\":5}),React.createElement(\"path\",{\"d\":\"M220.164 33H240.632V27.6257H225.455V19.1871H240.632V13.8129H225.455V5.37429H240.632V0H220.164V33Z\",\"fill\":\"white\",\"key\":6}),React.createElement(\"path\",{\"d\":\"M248.909 33H255.731L265.478 20.79L275.178 33H282L268.866 16.5L282 0H275.224L265.478 12.21L255.731 0H248.909L262.043 16.5L248.909 33Z\",\"fill\":\"white\",\"key\":7})]);\n}\n\nMetaplexInline.defaultProps = {\"viewBox\":\"0 0 282 33\",\"fill\":\"none\"};\n\nmodule.exports = MetaplexInline;\n\nMetaplexInline.default = MetaplexInline;\n","var React = require('react');\n\nfunction TwitterInline (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M35.4645 7.40561C34.212 7.96061 32.8665 8.33562 31.452 8.50512C32.9115 7.6318 34.0034 6.25731 34.524 4.63812C33.1528 5.4526 31.652 6.02591 30.087 6.33312C29.0346 5.20941 27.6406 4.4646 26.1215 4.21433C24.6024 3.96405 23.0431 4.2223 21.6859 4.94899C20.3286 5.67569 19.2492 6.83016 18.6152 8.23317C17.9813 9.63618 17.8283 11.2092 18.18 12.7081C15.4015 12.5686 12.6834 11.8464 10.2021 10.5885C7.72083 9.33051 5.53176 7.56486 3.777 5.40612C3.177 6.44112 2.832 7.64112 2.832 8.91912C2.83133 10.0696 3.11465 11.2025 3.65682 12.2172C4.19899 13.2319 4.98324 14.0972 5.94 14.7361C4.83042 14.7008 3.74531 14.401 2.775 13.8616V13.9516C2.77489 15.5652 3.33305 17.1292 4.35478 18.3781C5.3765 19.627 6.79886 20.484 8.3805 20.8036C7.35118 21.0822 6.27201 21.1232 5.2245 20.9236C5.67075 22.312 6.54 23.5262 7.71055 24.396C8.88111 25.2659 10.2944 25.7479 11.7525 25.7746C9.27725 27.7177 6.22033 28.7717 3.0735 28.7671C2.51607 28.7673 1.95912 28.7347 1.4055 28.6696C4.59972 30.7234 8.31801 31.8133 12.1155 31.8091C24.9705 31.8091 31.998 21.1621 31.998 11.9281C31.998 11.6281 31.9905 11.3251 31.977 11.0251C33.3439 10.0366 34.5239 8.81246 35.4615 7.41012L35.4645 7.40561Z\",\"fill\":\"white\"}));\n}\n\nTwitterInline.defaultProps = {\"width\":\"36\",\"height\":\"36\",\"viewBox\":\"0 0 36 36\",\"fill\":\"none\"};\n\nmodule.exports = TwitterInline;\n\nTwitterInline.default = TwitterInline;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/chunk-map.json b/js/packages/metaplex/public/chunk-map.json new file mode 100644 index 0000000..2e0adbe --- /dev/null +++ b/js/packages/metaplex/public/chunk-map.json @@ -0,0 +1 @@ +{"polyfill":["/polyfill-dc4555e1b00a46bbbf7c.js"],"app":["/app-2f076d30e065ec55fdcd.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-92c4dde23a9111f3a875.js"],"component---src-pages-contact-tsx":["/component---src-pages-contact-tsx-b745644e6a40fed257e5.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-dc693e317fbf62305a31.js"]} \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-404-tsx-780015d0fdfb3d631345.js b/js/packages/metaplex/public/component---src-pages-404-tsx-780015d0fdfb3d631345.js new file mode 100644 index 0000000..b961856 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-404-tsx-780015d0fdfb3d631345.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[218],{388:function(t,e,o){"use strict";o.r(e);o(2784);var n=o(8447),l=o(8832),a={color:"#232129",padding:"96px",fontFamily:"-apple-system, Roboto, sans-serif, serif"},i={marginTop:0,marginBottom:64,maxWidth:320},r={marginBottom:48};e.default=function(){return(0,l.tZ)("main",{style:a},(0,l.tZ)("title",null,"Not found"),(0,l.tZ)("h1",{style:i},"Page not found"),(0,l.tZ)("p",{style:r},"Sorry"," ",(0,l.tZ)("span",{role:"img","aria-label":"Pensive emoji"},"😔")," ","we couldn’t find what you were looking for.",(0,l.tZ)("br",null),null,(0,l.tZ)("br",null),(0,l.tZ)(n.Link,{to:"/"},"Go home"),"."))}}}]); +//# sourceMappingURL=component---src-pages-404-tsx-780015d0fdfb3d631345.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-404-tsx-780015d0fdfb3d631345.js.map b/js/packages/metaplex/public/component---src-pages-404-tsx-780015d0fdfb3d631345.js.map new file mode 100644 index 0000000..ae9c6e4 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-404-tsx-780015d0fdfb3d631345.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/./src/pages/404.tsx"],"names":["pageStyles","color","padding","fontFamily","headingStyles","marginTop","marginBottom","maxWidth","paragraphStyles","style","role","aria-label","Link","to"],"mappings":"+IAIMA,EAAa,CACjBC,MAAO,UACPC,QAAS,OACTC,WAAY,4CAERC,EAAgB,CACpBC,UAAW,EACXC,aAAc,GACdC,SAAU,KAGNC,EAAkB,CACtBF,aAAc,IAqChB,UA1BqB,WACnB,OACE,gBAAMG,MAAOT,IACX,mCACA,cAAIS,MAAOL,GAAX,mBACA,aAAGK,MAAOD,GAAV,QACQ,KACN,gBAAME,KAAK,MAAMC,aAAW,iBAA5B,MAEQ,IAJV,+CAME,mBAOI,MACJ,oBACA,QAAC,EAAAC,KAAD,CAAMC,GAAG,KAAT,WAfF","file":"component---src-pages-404-tsx-780015d0fdfb3d631345.js","sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\n// styles\nconst pageStyles = {\n color: '#232129',\n padding: '96px',\n fontFamily: '-apple-system, Roboto, sans-serif, serif',\n};\nconst headingStyles = {\n marginTop: 0,\n marginBottom: 64,\n maxWidth: 320,\n};\n\nconst paragraphStyles = {\n marginBottom: 48,\n};\nconst codeStyles = {\n color: '#8A6534',\n padding: 4,\n backgroundColor: '#FFF4DB',\n fontSize: '1.25rem',\n borderRadius: 4,\n};\n\n// markup\nconst NotFoundPage = (): React.ReactElement => {\n return (\n
\n Not found\n

Page not found

\n

\n Sorry{' '}\n \n 😔\n {' '}\n we couldn’t find what you were looking for.\n
\n {process.env.NODE_ENV === 'development' ? (\n <>\n
\n Try creating a page in src/pages/.\n
\n \n ) : null}\n
\n Go home.\n

\n
\n );\n};\n\nexport default NotFoundPage;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-404-tsx-92c4dde23a9111f3a875.js b/js/packages/metaplex/public/component---src-pages-404-tsx-92c4dde23a9111f3a875.js new file mode 100644 index 0000000..6d6f5c2 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-404-tsx-92c4dde23a9111f3a875.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[180],{388:function(t,e,o){"use strict";o.r(e);o(2784);var n=o(8447),l=o(8832),a={color:"#232129",padding:"96px",fontFamily:"-apple-system, Roboto, sans-serif, serif"},i={marginTop:0,marginBottom:64,maxWidth:320},r={marginBottom:48};e.default=function(){return(0,l.tZ)("main",{style:a},(0,l.tZ)("title",null,"Not found"),(0,l.tZ)("h1",{style:i},"Page not found"),(0,l.tZ)("p",{style:r},"Sorry"," ",(0,l.tZ)("span",{role:"img","aria-label":"Pensive emoji"},"😔")," ","we couldn’t find what you were looking for.",(0,l.tZ)("br",null),null,(0,l.tZ)("br",null),(0,l.tZ)(n.Link,{to:"/"},"Go home"),"."))}}}]); +//# sourceMappingURL=component---src-pages-404-tsx-92c4dde23a9111f3a875.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-404-tsx-92c4dde23a9111f3a875.js.map b/js/packages/metaplex/public/component---src-pages-404-tsx-92c4dde23a9111f3a875.js.map new file mode 100644 index 0000000..acdbdcf --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-404-tsx-92c4dde23a9111f3a875.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/./src/pages/404.tsx"],"names":["pageStyles","color","padding","fontFamily","headingStyles","marginTop","marginBottom","maxWidth","paragraphStyles","style","role","aria-label","Link","to"],"mappings":"+IAIMA,EAAa,CACjBC,MAAO,UACPC,QAAS,OACTC,WAAY,4CAERC,EAAgB,CACpBC,UAAW,EACXC,aAAc,GACdC,SAAU,KAGNC,EAAkB,CACtBF,aAAc,IAqChB,UA1BqB,WACnB,OACE,gBAAMG,MAAOT,IACX,mCACA,cAAIS,MAAOL,GAAX,mBACA,aAAGK,MAAOD,GAAV,QACQ,KACN,gBAAME,KAAK,MAAMC,aAAW,iBAA5B,MAEQ,IAJV,+CAME,mBAOI,MACJ,oBACA,QAAC,EAAAC,KAAD,CAAMC,GAAG,KAAT,WAfF","file":"component---src-pages-404-tsx-92c4dde23a9111f3a875.js","sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\n// styles\nconst pageStyles = {\n color: '#232129',\n padding: '96px',\n fontFamily: '-apple-system, Roboto, sans-serif, serif',\n};\nconst headingStyles = {\n marginTop: 0,\n marginBottom: 64,\n maxWidth: 320,\n};\n\nconst paragraphStyles = {\n marginBottom: 48,\n};\nconst codeStyles = {\n color: '#8A6534',\n padding: 4,\n backgroundColor: '#FFF4DB',\n fontSize: '1.25rem',\n borderRadius: 4,\n};\n\n// markup\nconst NotFoundPage = (): React.ReactElement => {\n return (\n
\n Not found\n

Page not found

\n

\n Sorry{' '}\n \n 😔\n {' '}\n we couldn’t find what you were looking for.\n
\n {process.env.NODE_ENV === 'development' ? (\n <>\n
\n Try creating a page in src/pages/.\n
\n \n ) : null}\n
\n Go home.\n

\n
\n );\n};\n\nexport default NotFoundPage;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-contact-tsx-b745644e6a40fed257e5.js b/js/packages/metaplex/public/component---src-pages-contact-tsx-b745644e6a40fed257e5.js new file mode 100644 index 0000000..a65fc59 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-contact-tsx-b745644e6a40fed257e5.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[650],{8895:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return f}});var r=a(6108),n=a(2784),i=a(8447),m=a(1870),o=a(4881),d=a(629),c=a(8832);var l=(0,r.Z)("div",{target:"e1aa9jfc3"})("text-align:center; padding:4rem 1.5rem 2rem;max-width:1088px;margin:0 auto;@media (min-width: ",d.Z.md,"px){padding:5rem 0 2rem;}"),p=(0,r.Z)("div",{target:"e1aa9jfc2"})({name:"das83t",styles:"max-width:584px;margin:0 auto;div{max-width:none;}input{border-radius:8px;}"}),u=(0,r.Z)("h1",{target:"e1aa9jfc1"})({name:"12epgt4",styles:"--tw-text-opacity:1;color:rgba(255, 255, 255, var(--tw-text-opacity)); font-size:3rem;font-weight:700;line-height:4rem;margin-bottom:2rem"}),s=(0,r.Z)("h2",{target:"e1aa9jfc0"})({name:"7kxz5t",styles:"--tw-text-opacity:1;color:rgba(189, 189, 189, var(--tw-text-opacity)); font-size:1.75rem;font-weight:500;line-height:3rem;margin-bottom:3rem"});function f(){var t=(0,i.useStaticQuery)("2170090192").content;return(0,n.useEffect)((function(){var t=document.createElement("script");t.src="https://webforms.pipedrive.com/f/loader",t.defer=!0,document.body.appendChild(t)}),[]),(0,c.tZ)(m.Z,null,(0,c.tZ)(o.Z,null),(0,c.tZ)(l,null,(0,c.tZ)(u,null,t.frontmatter.title),(0,c.tZ)(s,null,t.rawMarkdownBody),(0,c.tZ)(p,null,(0,c.tZ)("div",{className:"pipedriveWebForms","data-pd-webforms":"https://webforms.pipedrive.com/f/1r5Zbv3nhXgwNpyOQrePG6xH0guwfdLM9OaAeNPzk856f8tT2IROcy97zLmu4IkRJ"}))))}}}]); +//# sourceMappingURL=component---src-pages-contact-tsx-b745644e6a40fed257e5.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-contact-tsx-b745644e6a40fed257e5.js.map b/js/packages/metaplex/public/component---src-pages-contact-tsx-b745644e6a40fed257e5.js.map new file mode 100644 index 0000000..b52a4a7 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-contact-tsx-b745644e6a40fed257e5.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/./src/pages/contact.tsx"],"names":["ContactContainer","BREAKPOINTS","FormWrapper","Title","SubTitle","Contact","content","useStaticQuery","useEffect","script","document","createElement","src","defer","body","appendChild","frontmatter","title","rawMarkdownBody","className","data-pd-webforms"],"mappings":"+NAOA,IAAMA,GAAgB,oIAOCC,OAPD,6BAWhBC,GAAW,yIAYXC,GAAK,uMASLC,GAAQ,yMAUC,SAASC,IACtB,IAAQC,GAAYC,oBAAe,cAA3BD,QAoBR,OAPAE,gBAAU,WACR,IAAMC,EAASC,SAASC,cAAc,UACtCF,EAAOG,IAAM,0CACbH,EAAOI,OAAQ,EACfH,SAASI,KAAKC,YAAYN,KACzB,KAGD,QAAC,IAAD,MACE,QAAC,IAAD,OACA,QAACT,EAAD,MACE,QAACG,EAAD,KAAQG,EAAQU,YAAYC,QAC5B,QAACb,EAAD,KAAWE,EAAQY,kBACnB,QAAChB,EAAD,MACE,eACEiB,UAAU,oBACVC,mBAAiB","file":"component---src-pages-contact-tsx-b745644e6a40fed257e5.js","sourcesContent":["import React, { useEffect } from 'react';\nimport tw, { styled } from 'twin.macro';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport Layout from '../components/Layout';\nimport Header from '../components/Header';\nimport BREAKPOINTS from '../styles/breakpoints';\n\nconst ContactContainer = styled.div`\n ${tw`\n text-center\n `}\n padding: 4rem 1.5rem 2rem;\n max-width: 1088px;\n margin: 0 auto;\n @media (min-width: ${BREAKPOINTS.md}px) {\n padding: 5rem 0 2rem;\n }\n`;\nconst FormWrapper = styled.div`\n max-width: 584px;\n margin: 0 auto;\n\n div {\n max-width: none;\n }\n\n input {\n border-radius: 8px;\n }\n`;\nconst Title = styled.h1`\n ${tw`\n text-white\n `}\n font-size: 3rem;\n font-weight: 700;\n line-height: 4rem;\n margin-bottom: 2rem;\n`;\nconst SubTitle = styled.h2`\n ${tw`\n text-gray40\n `}\n font-size: 1.75rem;\n font-weight: 500;\n line-height: 3rem;\n margin-bottom: 3rem;\n`;\n\nexport default function Contact(): React.ReactElement {\n const { content } = useStaticQuery(\n graphql`\n query {\n content: markdownRemark(frontmatter: { slug: { eq: \"contact\" } }) {\n frontmatter {\n title\n }\n rawMarkdownBody\n }\n }\n `,\n );\n\n useEffect(() => {\n const script = document.createElement('script');\n script.src = 'https://webforms.pipedrive.com/f/loader';\n script.defer = true;\n document.body.appendChild(script);\n }, []);\n\n return (\n \n
\n \n {content.frontmatter.title}\n {content.rawMarkdownBody}\n \n \n \n \n \n );\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-index-tsx-adfe079f3ebdadcb99e8.js b/js/packages/metaplex/public/component---src-pages-index-tsx-adfe079f3ebdadcb99e8.js new file mode 100644 index 0000000..af26133 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-index-tsx-adfe079f3ebdadcb99e8.js @@ -0,0 +1,2 @@ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[691],{2087:function(e){var t="undefined"!=typeof Element,r="function"==typeof Map,C="function"==typeof Set,n="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,o){if(e===o)return!0;if(e&&o&&"object"==typeof e&&"object"==typeof o){if(e.constructor!==o.constructor)return!1;var a,l,s,H;if(Array.isArray(e)){if((a=e.length)!=o.length)return!1;for(l=a;0!=l--;)if(!i(e[l],o[l]))return!1;return!0}if(r&&e instanceof Map&&o instanceof Map){if(e.size!==o.size)return!1;for(H=e.entries();!(l=H.next()).done;)if(!o.has(l.value[0]))return!1;for(H=e.entries();!(l=H.next()).done;)if(!i(l.value[1],o.get(l.value[0])))return!1;return!0}if(C&&e instanceof Set&&o instanceof Set){if(e.size!==o.size)return!1;for(H=e.entries();!(l=H.next()).done;)if(!o.has(l.value[0]))return!1;return!0}if(n&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(o)){if((a=e.length)!=o.length)return!1;for(l=a;0!=l--;)if(e[l]!==o[l])return!1;return!0}if(e.constructor===RegExp)return e.source===o.source&&e.flags===o.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===o.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===o.toString();if((a=(s=Object.keys(e)).length)!==Object.keys(o).length)return!1;for(l=a;0!=l--;)if(!Object.prototype.hasOwnProperty.call(o,s[l]))return!1;if(t&&e instanceof Element)return!1;for(l=a;0!=l--;)if(("_owner"!==s[l]&&"__v"!==s[l]&&"__o"!==s[l]||!e.$$typeof)&&!i(e[s[l]],o[s[l]]))return!1;return!0}return e!=e&&o!=o}e.exports=function(e,t){try{return i(e,t)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}}},5331:function(e,t,r){"use strict";var C,n=r(2784),i=(C=n)&&"object"==typeof C&&"default"in C?C.default:C;function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,r){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==r&&"function"!=typeof r)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(C){if("function"!=typeof C)throw new Error("Expected WrappedComponent to be a React component.");var l,s=[];function H(){l=e(s.map((function(e){return e.props}))),V.canUseDOM?t(l):r&&(l=r(l))}var V=function(e){var t,r;function n(){return e.apply(this,arguments)||this}r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,n.peek=function(){return l},n.rewind=function(){if(n.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=l;return l=void 0,s=[],e};var o=n.prototype;return o.UNSAFE_componentWillMount=function(){s.push(this),H()},o.componentDidUpdate=function(){H()},o.componentWillUnmount=function(){var e=s.indexOf(this);s.splice(e,1),H()},o.render=function(){return i.createElement(C,this.props)},n}(n.PureComponent);return o(V,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(C)+")"),o(V,"canUseDOM",a),V}}},1684:function(e,t,r){"use strict";r.r(t),r.d(t,{default:function(){return ut}});var C=r(2784),n=r(8832);var i,o,a,l,s={name:"1k7bt4o",styles:"html{scroll-behavior:smooth;}body{background-image:linear-gradient(to top right, var(--tw-gradient-stops));--tw-gradient-from:#010101;--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to, rgba(1, 1, 1, 0));--tw-gradient-to:#091E21;;}h1{font-size:3.75rem;line-height:1;font-family:Inter, sans-serif;margin-bottom:1.5rem;@media (min-width: 768px){font-size:6rem;line-height:1;};}h2{font-size:3rem;line-height:1;font-family:Inter, sans-serif;margin-bottom:1rem;@media (min-width: 768px){font-size:3.75rem;line-height:1;};}h3{font-size:1.5rem;line-height:2rem;font-family:Inter, sans-serif;margin-bottom:0.75rem;@media (min-width: 768px){font-size:2.25rem;line-height:2.5rem;};}h5,h6{font-size:0.75rem;line-height:1rem;font-family:Inter, sans-serif;text-transform:uppercase;@media (min-width: 640px){font-size:0.875rem;line-height:1.25rem;} color:white;}h6{margin-left:1rem;margin-right:1rem;margin-top:auto;margin-bottom:auto; color:white;}p{font-family:Inter, sans-serif;margin-bottom:1.5rem;;}svg{width:100%;height:auto;}"},H=r(8447),V=r(3980),c=r.n(V),L=r(5331),d=r.n(L),u=r(2087),p=r.n(u),Z=r(6694),M=r.n(Z),f="bodyAttributes",m="htmlAttributes",g="titleAttributes",h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},y=(Object.keys(h).map((function(e){return h[e]})),"charset"),b="cssText",w="href",v="http-equiv",x="innerHTML",k="itemprop",T="name",E="property",S="rel",A="src",O="target",P={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},_="defaultTitle",j="defer",B="encodeSpecialCharacters",z="onChangeClientState",I="titleTemplate",R=Object.keys(P).reduce((function(e,t){return e[P[t]]=t,e}),{}),U=[h.NOSCRIPT,h.SCRIPT,h.STYLE],N="data-react-helmet",F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},q=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},D=function(){function e(e,t){for(var r=0;r=0||Object.prototype.hasOwnProperty.call(e,C)&&(r[C]=e[C]);return r},W=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},K=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},Q=function(e){var t=te(e,h.TITLE),r=te(e,I);if(r&&t)return r.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var C=te(e,_);return t||C||void 0},X=function(e){return te(e,z)||function(){}},$=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return Y({},e,t)}),{})},J=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,r){if(!t.length)for(var C=Object.keys(r),n=0;n=0;r--){var C=e[r];if(C.hasOwnProperty(t))return C[t]}return null},re=(i=Date.now(),function(e){var t=Date.now();t-i>16?(i=t,e(t)):setTimeout((function(){re(e)}),0)}),Ce=function(e){return clearTimeout(e)},ne="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||re:r.g.requestAnimationFrame||re,ie="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||Ce:r.g.cancelAnimationFrame||Ce,oe=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},ae=null,le=function(e,t){var r=e.baseTag,C=e.bodyAttributes,n=e.htmlAttributes,i=e.linkTags,o=e.metaTags,a=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,H=e.styleTags,V=e.title,c=e.titleAttributes;Ve(h.BODY,C),Ve(h.HTML,n),He(V,c);var L={baseTag:ce(h.BASE,r),linkTags:ce(h.LINK,i),metaTags:ce(h.META,o),noscriptTags:ce(h.NOSCRIPT,a),scriptTags:ce(h.SCRIPT,s),styleTags:ce(h.STYLE,H)},d={},u={};Object.keys(L).forEach((function(e){var t=L[e],r=t.newTags,C=t.oldTags;r.length&&(d[e]=r),C.length&&(u[e]=L[e].oldTags)})),t&&t(),l(e,d,u)},se=function(e){return Array.isArray(e)?e.join(""):e},He=function(e,t){void 0!==e&&document.title!==e&&(document.title=se(e)),Ve(h.TITLE,t)},Ve=function(e,t){var r=document.getElementsByTagName(e)[0];if(r){for(var C=r.getAttribute(N),n=C?C.split(","):[],i=[].concat(n),o=Object.keys(t),a=0;a=0;V--)r.removeAttribute(i[V]);n.length===i.length?r.removeAttribute(N):r.getAttribute(N)!==o.join(",")&&r.setAttribute(N,o.join(","))}},ce=function(e,t){var r=document.head||document.querySelector(h.HEAD),C=r.querySelectorAll(e+"["+"data-react-helmet]"),n=Array.prototype.slice.call(C),i=[],o=void 0;return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var C in t)if(t.hasOwnProperty(C))if(C===x)r.innerHTML=t.innerHTML;else if(C===b)r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText));else{var a=void 0===t[C]?"":t[C];r.setAttribute(C,a)}r.setAttribute(N,"true"),n.some((function(e,t){return o=t,r.isEqualNode(e)}))?n.splice(o,1):i.push(r)})),n.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:n,newTags:i}},Le=function(e){return Object.keys(e).reduce((function(t,r){var C=void 0!==e[r]?r+'="'+e[r]+'"':""+r;return t?t+" "+C:C}),"")},de=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,r){return t[P[r]||r]=e[r],t}),t)},ue=function(e,t,r){switch(e){case h.TITLE:return{toComponent:function(){return e=t.title,r=t.titleAttributes,(n={key:e})[N]=!0,i=de(r,n),[C.createElement(h.TITLE,i,e)];var e,r,n,i},toString:function(){return function(e,t,r,C){var n=Le(r),i=se(t);return n?"<"+e+' data-react-helmet="true" '+n+">"+K(i,C)+"":"<"+e+' data-react-helmet="true">'+K(i,C)+""}(e,t.title,t.titleAttributes,r)}};case f:case m:return{toComponent:function(){return de(t)},toString:function(){return Le(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,r){var n,i=((n={key:r})[N]=!0,n);return Object.keys(t).forEach((function(e){var r=P[e]||e;if(r===x||r===b){var C=t.innerHTML||t.cssText;i.dangerouslySetInnerHTML={__html:C}}else i[r]=t[e]})),C.createElement(e,i)}))}(e,t)},toString:function(){return function(e,t,r){return t.reduce((function(t,C){var n=Object.keys(C).filter((function(e){return!(e===x||e===b)})).reduce((function(e,t){var n=void 0===C[t]?t:t+'="'+K(C[t],r)+'"';return e?e+" "+n:n}),""),i=C.innerHTML||C.cssText||"",o=-1===U.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+n+(o?"/>":">"+i+"")}),"")}(e,t,r)}}}},pe=function(e){var t=e.baseTag,r=e.bodyAttributes,C=e.encode,n=e.htmlAttributes,i=e.linkTags,o=e.metaTags,a=e.noscriptTags,l=e.scriptTags,s=e.styleTags,H=e.title,V=void 0===H?"":H,c=e.titleAttributes;return{base:ue(h.BASE,t,C),bodyAttributes:ue(f,r,C),htmlAttributes:ue(m,n,C),link:ue(h.LINK,i,C),meta:ue(h.META,o,C),noscript:ue(h.NOSCRIPT,a,C),script:ue(h.SCRIPT,l,C),style:ue(h.STYLE,s,C),title:ue(h.TITLE,{title:V,titleAttributes:c},C)}},Ze=d()((function(e){return{baseTag:J([w,O],e),bodyAttributes:$(f,e),defer:te(e,j),encode:te(e,B),htmlAttributes:$(m,e),linkTags:ee(h.LINK,[S,w],e),metaTags:ee(h.META,[T,y,v,E,k],e),noscriptTags:ee(h.NOSCRIPT,[x],e),onChangeClientState:X(e),scriptTags:ee(h.SCRIPT,[A,x],e),styleTags:ee(h.STYLE,[b],e),title:Q(e),titleAttributes:$(g,e)}}),(function(e){ae&&ie(ae),e.defer?ae=ne((function(){le(e,(function(){ae=null}))})):(le(e),ae=null)}),pe)((function(){return null})),Me=(o=Ze,l=a=function(e){function t(){return q(this,t),W(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!p()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,r=e.child,C=e.arrayTypeChildren,n=e.newChildProps,i=e.nestedChildren;return Y({},C,((t={})[r.type]=[].concat(C[r.type]||[],[Y({},n,this.mapNestedChildrenToProps(r,i))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,r,C=e.child,n=e.newProps,i=e.newChildProps,o=e.nestedChildren;switch(C.type){case h.TITLE:return Y({},n,((t={})[C.type]=o,t.titleAttributes=Y({},i),t));case h.BODY:return Y({},n,{bodyAttributes:Y({},i)});case h.HTML:return Y({},n,{htmlAttributes:Y({},i)})}return Y({},n,((r={})[C.type]=Y({},i),r))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var r=Y({},t);return Object.keys(e).forEach((function(t){var C;r=Y({},r,((C={})[t]=e[t],C))})),r},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var r=this,n={};return C.Children.forEach(e,(function(e){if(e&&e.props){var C=e.props,i=C.children,o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,r){return t[R[r]||r]=e[r],t}),t)}(G(C,["children"]));switch(r.warnOnInvalidChildren(e,i),e.type){case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:n=r.flattenArrayTypeChildren({child:e,arrayTypeChildren:n,newChildProps:o,nestedChildren:i});break;default:t=r.mapObjectTypeChildren({child:e,newProps:t,newChildProps:o,nestedChildren:i})}}})),t=this.mapArrayTypeChildrenToProps(n,t)},t.prototype.render=function(){var e=this.props,t=e.children,r=G(e,["children"]),n=Y({},r);return t&&(n=this.mapChildrenToProps(t,n)),C.createElement(o,n)},D(t,null,[{key:"canUseDOM",set:function(e){o.canUseDOM=e}}]),t}(C.Component),a.propTypes={base:c().object,bodyAttributes:c().object,children:c().oneOfType([c().arrayOf(c().node),c().node]),defaultTitle:c().string,defer:c().bool,encodeSpecialCharacters:c().bool,htmlAttributes:c().object,link:c().arrayOf(c().object),meta:c().arrayOf(c().object),noscript:c().arrayOf(c().object),onChangeClientState:c().func,script:c().arrayOf(c().object),style:c().arrayOf(c().object),title:c().string,titleAttributes:c().object,titleTemplate:c().string},a.defaultProps={defer:!0,encodeSpecialCharacters:!0},a.peek=o.peek,a.rewind=function(){var e=o.rewind();return e||(e=pe({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},l);Me.renderStatic=Me.rewind;var fe=function(e){var t=e.description,r=e.lang,C=e.title,i=(0,H.useStaticQuery)("3128451518").site,o=t||i.siteMetadata.description;return(0,n.tZ)(Me,{htmlAttributes:{lang:r},meta:[{name:"description",content:o},{property:"og:title",content:C},{property:"og:description",content:o},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary"},{name:"twitter:creator",content:i.siteMetadata.author},{name:"twitter:title",content:C},{name:"twitter:description",content:o}],title:C,titleTemplate:"%s | "+i.siteMetadata.title})};fe.defaultProps={lang:"en",keywords:[],meta:[]};var me=fe;var ge={name:"1jx1u50",styles:"*,*::before,*::after{box-sizing:border-box;}:root{-moz-tab-size:4;tab-size:4;}html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0;}body{font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji';}hr{height:0;color:inherit;}abbr[title]{text-decoration:underline dotted;}b,strong{font-weight:bolder;}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,'Liberation Mono',Menlo,monospace;font-size:1em;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}table{text-indent:0;border-color:inherit;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,select{text-transform:none;}button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;}::-moz-focus-inner{border-style:none;padding:0;}:-moz-focusring{outline:1px dotted ButtonText;}:-moz-ui-invalid{box-shadow:none;}legend{padding:0;}progress{vertical-align:baseline;}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto;}[type='search']{-webkit-appearance:textfield;outline-offset:-2px;}::-webkit-search-decoration{-webkit-appearance:none;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}summary{display:list-item;}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0;}button{background-color:transparent;background-image:none;}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color;}fieldset{margin:0;padding:0;}ol,ul{list-style:none;margin:0;padding:0;}html{font-family:Inter,sans-serif;line-height:1.5;}body{font-family:inherit;line-height:inherit;}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb;}hr{border-top-width:1px;}img{border-style:solid;}textarea{resize:vertical;}input::placeholder,textarea::placeholder{color:#9ca3af;}button,[role=\"button\"]{cursor:pointer;}table{border-collapse:collapse;}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;}a{color:inherit;text-decoration:inherit;}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit;}pre,code,kbd,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto;}@keyframes spin{to{transform:rotate(360deg);}}@keyframes ping{75%,100%{transform:scale(2);opacity:0;}}@keyframes pulse{50%{opacity:.5;}}@keyframes bounce{0%,100%{transform:translateY(-25%);animationTimingFunction:cubic-bezier(0.8,0,1,1);}50%{transform:none;animationTimingFunction:cubic-bezier(0,0,0.2,1);}}*{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59, 130, 246, 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;}*{--tw-shadow:0 0 #0000;}"},he=function(){return(0,n.tZ)(n.xB,{styles:ge})},ye=function(e){var t=e.children;return(0,n.tZ)(C.Fragment,null,(0,n.tZ)(me,{title:"Metaplex"}),(0,n.tZ)(he,null),(0,n.tZ)(n.xB,{styles:s}),(0,n.tZ)("main",null,t))},be=r(7560),we=r(5064),ve=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,xe=(0,we.Z)((function(e){return ve.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),ke=r(1995),Te=r(2933),Ee=r(7513),Se=xe,Ae=function(e){return"theme"!==e},Oe=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?Se:Ae},Pe=function(e,t,r){var C;if(t){var n=t.shouldForwardProp;C=e.__emotion_forwardProp&&n?function(t){return e.__emotion_forwardProp(t)&&n(t)}:n}return"function"!=typeof C&&r&&(C=e.__emotion_forwardProp),C},_e=function e(t,r){var n,i,o=t.__emotion_real===t,a=o&&t.__emotion_base||t;void 0!==r&&(n=r.label,i=r.target);var l=Pe(t,r,o),s=l||Oe(a),H=!s("as");return function(){var V=arguments,c=o&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==n&&c.push("label:"+n+";"),null==V[0]||void 0===V[0].raw)c.push.apply(c,V);else{0,c.push(V[0][0]);for(var L=V.length,d=1;d &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n\n\n var it;\n\n if (hasMap && a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n }\n\n return true;\n }\n\n if (hasSet && a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n return true;\n } // END: Modifications\n\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n } // END: fast-deep-equal\n // START: react-fast-compare\n // custom handling for DOM elements\n\n\n if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact\n\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n continue;\n } // all other properties should be traversed as usual\n\n\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n } // END: react-fast-compare\n // START: fast-deep-equal\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message || '').match(/stack|recursion/i)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n};","'use strict';\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar React = require('react');\n\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n } // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;","import tw, { css } from 'twin.macro';\n\nconst globalStyles = css`\n html {\n scroll-behavior: smooth;\n }\n body {\n ${tw`bg-gradient-to-tr from-mainBgStart to-mainBgStop`}\n }\n h1 {\n ${tw`text-6xl md:text-8xl font-header mb-6`}\n }\n h2 {\n ${tw`text-5xl md:text-6xl font-header mb-4`}\n }\n h3 {\n ${tw`text-2xl md:text-4xl font-header mb-3`}\n }\n h5,\n h6 {\n ${tw`text-xs sm:text-sm font-sans uppercase`}\n color: white;\n }\n h6 {\n ${tw`mx-4 my-auto`}\n color: white;\n }\n p {\n ${tw`font-sans mb-6`}\n }\n svg {\n width: 100%;\n height: auto;\n }\n`;\n\nexport default globalStyles;\n","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase(); // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n } // Special case for innerHTML which doesn't work lowercased\n\n\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n }); // Update seen tags with tags from this instance\n\n var keys = Object.keys(instanceSeenTags);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n updateTitle(title, titleAttributes);\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n var addedTags = {};\n var removedTags = {};\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n cb && cb();\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\"); // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps; // assigning into an array to define toString function on it\n\n\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = {\n __html: content\n };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, {\n title: title,\n titleAttributes: titleAttributes\n }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexport default HelmetExport;\nexport { HelmetExport as Helmet };","import * as React from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\nimport { Helmet } from 'react-helmet';\n\ninterface ISEOProps {\n description?: string;\n lang?: string;\n // meta?: [];\n // keywords?: [];\n title?: string;\n}\n\nconst SEO = ({\n description,\n lang,\n // meta = [],\n // keywords = [],\n title,\n}: ISEOProps): React.ReactElement => {\n const { site } = useStaticQuery(graphql`\n query DefaultSEOQuery {\n site {\n siteMetadata {\n title\n description\n author\n }\n }\n }\n `);\n\n const metaDescription = description || site.siteMetadata.description;\n // const currentKeywords =\n // keywords?.length > 0\n // ? {\n // name: `keywords`,\n // content: keywords?.join(`, `),\n // }\n // : {};\n\n return (\n \n );\n};\n\nSEO.defaultProps = {\n lang: `en`,\n keywords: [],\n meta: [],\n};\n\nexport default SEO;\n","import { Global } from '@emotion/react';\nimport * as React from 'react';\nimport { GlobalStyles } from 'twin.macro';\nimport globalStyles from '../utils/globalStyles';\nimport FooterSection from './footerSection';\n\nimport SEO from './SEO';\n\ninterface ILayoutProps {\n children?: React.ReactNode;\n}\n\nconst Layout = ({ children }: ILayoutProps): React.ReactElement => {\n return (\n <>\n \n \n \n
\n {children}\n {/**/}\n
\n \n );\n};\n\nexport default Layout;\n","import memoize from '@emotion/memoize';\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\nexport default isPropValid;","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\n\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = insertStyles(cache, serialized, typeof finalTag === 'string');\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/createElement(finalTag, newProps);\n return ele;\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;","// Shorthand Version.\nimport tw from 'twin.macro';\n\nconst BaseButton = tw.button`\n bg-gradient-to-l from-btnPrimaryStart to-btnPrimaryStop\n hover:bg-gradient-to-tl\n rounded-lg\n font-sans\n text-sm text-white hover:text-black\n uppercase\n transition duration-500\n px-8 py-3\n`;\n\nexport default BaseButton;\n","import tw, { styled } from 'twin.macro';\n\nconst MockDisplay = styled.div`\n ${tw`\n bg-gradient-to-l from-btnPrimaryStart to-btnPrimaryStop\n text-black\n grid place-content-center\n `}\n width: 380px;\n min-height: 300px;\n`;\n\nexport default MockDisplay;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\n\nimport MetaplexSVG from '../../images/metaplex.inline.svg';\nimport BaseButton from '../BaseButton';\nimport MockDisplay from '../MockDisplay';\n\nconst SectionWrapper = styled.div`\n ${tw`\n min-h-halfScreen w-full\n py-0 inset-0\n flex flex-row justify-center\n `}\n`;\n\nconst ContainerLeft = styled.div`\n ${tw`w-full md:w-1/2\n text-white text-xl text-left\n py-3 sm:py-16\n px-2 sm:px-8`}\n`;\n\nconst ContainerRight = tw.div`\n relative\n w-full md:w-1/2\n text-white\n`;\n\nconst MetaplexWrapper = styled.div`\n ${tw`\n w-9/12\n mb-20\n `}\n`;\n\nconst BlueButton = tw(BaseButton)`\n bg-gradient-to-r from-btnBlueStart to-btnBlueStop\n text-sm uppercase\n px-8 py-3\n mt-5\n mr-2\n mb-2\n`;\n\nconst BottomMock = styled(MockDisplay)`\n position: absolute;\n top: 50px;\n left: 120px;\n`;\n\nconst TopMock = styled(MockDisplay)`\n position: absolute;\n top: 110px;\n left: 200px;\n`;\n\n/**\n * Top section (Hero section).\n *\n * @constructor\n */\nconst FirstSection = (): React.ReactElement => {\n const { hero } = useStaticQuery(\n graphql`\n query {\n hero: markdownRemark(frontmatter: { slug: { eq: \"hero\" } }) {\n frontmatter {\n title\n }\n rawMarkdownBody\n }\n }\n `,\n );\n return (\n \n \n \n \n \n

{hero.frontmatter.title}

\n

{hero.rawMarkdownBody}

\n Request an invite\n Contact\n
\n \n \n Product Mock\n \n
\n );\n};\n\nexport default FirstSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\n\nconst EventSectionWrapper = styled.div`\n ${tw`w-full p-4 sm:py-16 block md:flex flex-row`}\n background: linear-gradient(270deg, rgba(97, 103, 116, 0.24) 7.29%, rgba(64, 63, 76, 0.24) 100%);\n`;\n\nconst Container = styled.div`\n ${tw`flex flex-row justify-center`}\n h5 {\n text-transform: none;\n }\n`;\n\nconst InnerWrapper = tw.div`\n flex flex-col\n text-white\n w-1/2\n ml-5\n`;\n\nconst RacImage = tw(GatsbyImage)`\n rounded-full \n`;\n\n/**\n * Cite section.\n *\n * @constructor\n */\nconst CiteSection = (): React.ReactElement => {\n const { cite, racImage } = useStaticQuery(\n graphql`\n query {\n cite: markdownRemark(frontmatter: { slug: { eq: \"cite\" } }) {\n frontmatter {\n title\n summary\n }\n rawMarkdownBody\n }\n racImage: file(relativePath: { eq: \"rac.png\" }) {\n childImageSharp {\n gatsbyImageData(\n quality: 90\n placeholder: BLURRED\n layout: CONSTRAINED\n )\n }\n }\n }\n `,\n );\n\n const racImageData = getImage(racImage);\n return (\n \n \n \n \n

{cite.rawMarkdownBody}

\n

{cite.frontmatter.title}

\n
{cite.frontmatter.summary}
\n
\n
\n
\n );\n};\n\nexport default CiteSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\nimport MockDisplay from '../MockDisplay';\n\nconst OuterContainer = styled.div`\n ${tw`\n flex flex-col justify-center items-center\n text-white text-lg\n py-10\n bg-baseBg\n `}\n`;\n\nconst DropWrapper = tw.div`grid grid-cols-3 gap-5 place-content-center mt-4`;\n\nconst MockDrop = tw(MockDisplay)`\n rounded-lg\n`;\n\n/**\n * The Welcome Section.\n *\n * @constructor\n */\nconst WelcomeSection = (): React.ReactElement => {\n const { welcome } = useStaticQuery(\n graphql`\n query {\n welcome: markdownRemark(frontmatter: { slug: { eq: \"welcome\" } }) {\n frontmatter {\n title\n drop1\n drop2\n drop3\n }\n rawMarkdownBody\n }\n }\n `,\n );\n const {\n frontmatter: { title, drop1, drop2, drop3 },\n rawMarkdownBody,\n } = welcome;\n return (\n <>\n \n

{title}

\n

{rawMarkdownBody}

\n \n {drop1}\n {drop2}\n {drop3}\n \n
\n \n );\n};\n\nexport default WelcomeSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\nimport MockDisplay from '../MockDisplay';\n\ntype Props = {\n display?: string;\n className?: string;\n name?: string;\n};\n\nconst SectionDisplay = ({\n className,\n display,\n name,\n}: Props): React.ReactElement => {\n const displayImage = useStaticQuery(\n graphql`\n {\n nftShop: file(relativePath: { eq: \"nft_shop.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n nftExample: file(relativePath: { eq: \"nft_example.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n collab: file(relativePath: { eq: \"collab.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n }\n `,\n );\n\n return (\n \n {display === null ? (\n \n ) : (\n {display}\n )}\n \n );\n};\n\nexport default SectionDisplay;\n","import * as React from 'react';\nimport tw, { styled } from 'twin.macro';\n\nimport SectionDisplay from './SectionDisplay';\n\ntype SectionProps = {\n backgroundColor?: string;\n};\n\nconst SectionWrapper = styled.div`\n ${tw`\n min-h-halfScreen w-full\n py-5 md:py-20\n flex flex-col md:flex-row items-center\n `}\n h3 {\n ${tw`px-5 md:px-10`}\n }\n p {\n ${tw`px-5 md:px-10`}\n }\n background-color: ${props =>\n props.backgroundColor === 'light' ? `#121212` : `transparent`};\n`;\n\nconst ContainerText = styled.div`\n ${tw`\n w-full md:w-1/2\n text-white text-left\n `}\n`;\n\nconst ContainerDisplay = tw.div`\n w-full md:w-1/2\n flex flex-row items-center justify-center\n text-white\n`;\n\nconst RoundedSectionDisplay = styled(SectionDisplay)`\n ${tw`rounded-lg`}\n width: 640px;\n height: 440px;\n max-width: 90%;\n`;\n\nconst SectionBgGradient = styled(RoundedSectionDisplay)`\n ${tw`flex items-end`}\n background: linear-gradient(135deg, #eca572 0%, #155fce 100%);\n backdrop-filter: blur(600px);\n`;\n\nconst SectionBgColor = styled(RoundedSectionDisplay)`\n background: #ad7bbc;\n`;\n\ntype SingleSectionProps = {\n name: string;\n title?: string;\n position?: string;\n display?: string;\n background?: string;\n imageWrapper?: string;\n rawMarkdownBody?: string;\n};\n\n/**\n * Single Multi Section with position switch.\n *\n * @constructor\n */\nconst SingleSection = ({\n name,\n title,\n position,\n display,\n background,\n imageWrapper,\n rawMarkdownBody,\n}: SingleSectionProps): React.ReactElement => {\n return (\n \n {position === 'left' ? (\n <>\n \n

{title}

\n

{rawMarkdownBody}

\n
\n \n {imageWrapper === 'gradient' ? (\n \n ) : imageWrapper === 'color' ? (\n \n ) : (\n \n )}\n \n \n ) : (\n <>\n \n {imageWrapper === 'gradient' ? (\n \n ) : imageWrapper === 'color' ? (\n \n ) : (\n \n )}\n \n \n

{title}

\n

{rawMarkdownBody}

\n
\n \n )}\n
\n );\n};\n\nexport default SingleSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\n\nimport SingleSection from './SingleSection';\n\n/**\n * Multiple Sections from Markdown.\n *\n * @constructor\n */\nconst MultiSection = (): React.ReactElement => {\n const whichDisplay = useStaticQuery(\n graphql`\n fragment MarkdownSection on MarkdownRemark {\n frontmatter {\n title\n position\n display\n background\n imageWrapper\n }\n rawMarkdownBody\n }\n query {\n nftShop: markdownRemark(frontmatter: { slug: { eq: \"nftShop\" } }) {\n ...MarkdownSection\n }\n nftExample: markdownRemark(\n frontmatter: { slug: { eq: \"nftExample\" } }\n ) {\n ...MarkdownSection\n }\n auctions: markdownRemark(frontmatter: { slug: { eq: \"auctions\" } }) {\n ...MarkdownSection\n }\n collab: markdownRemark(frontmatter: { slug: { eq: \"collab\" } }) {\n ...MarkdownSection\n }\n }\n `,\n );\n\n const multipleSections = Object.keys(whichDisplay).map(currentDisplay => {\n const {\n frontmatter: { title, position, display, background, imageWrapper },\n rawMarkdownBody,\n } = whichDisplay[currentDisplay];\n\n return (\n \n );\n });\n\n return <>{multipleSections};\n};\n\nexport default MultiSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\n\nimport BaseButton from '../BaseButton';\n\nconst Container = styled.div`\n ${tw`\n flex flex-col justify-center items-center\n text-white py-10 md:py-44 md:pb-52\n `}\n`;\n\n/**\n * Footer section.\n *\n * @constructor\n */\nconst FooterSection = (): React.ReactElement => {\n const { footer } = useStaticQuery(\n graphql`\n query {\n footer: markdownRemark(frontmatter: { slug: { eq: \"footer\" } }) {\n frontmatter {\n title\n button\n }\n rawMarkdownBody\n }\n }\n `,\n );\n return (\n <>\n \n

{footer.frontmatter.title}

\n

{footer.rawMarkdownBody}

\n {footer.frontmatter.button}\n
\n \n );\n};\n\nexport default FooterSection;\n","import * as React from 'react';\n\nimport Layout from '../components/Layout';\nimport FirstSection from '../components/firstSection';\nimport CiteSection from '../components/citeSection';\nimport WelcomeSection from '../components/welcomeSection';\nimport MultiSection from '../components/multiSection';\nimport FooterSection from '../components/footerSection';\n\nconst IndexPage = (): React.ReactElement => (\n \n \n \n \n \n \n \n);\n\nexport default IndexPage;\n","var React = require('react');\n\nfunction MetaplexInline (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"mask\",{\"id\":\"path-1-inside-1\",\"fill\":\"white\",\"key\":0},[React.createElement(\"path\",{\"d\":\"M47.1816 43.9268H43.3767V13.178C43.3767 11.8602 43.123 10.64 42.6157 9.51747C42.1083 8.34609 41.3981 7.32113 40.4849 6.44259C39.5717 5.56406 38.5063 4.88075 37.2887 4.39268C36.1218 3.9046 34.8535 3.66057 33.4837 3.66057H13.6979C12.3281 3.66057 11.0344 3.9046 9.81682 4.39268C8.64997 4.88075 7.60994 5.56406 6.69675 6.44259C5.78355 7.32113 5.07329 8.34609 4.56596 9.51747C4.05863 10.64 3.80497 11.8602 3.80497 13.178V43.9268H0V13.178C0 11.3722 0.35513 9.66389 1.06539 8.05324C1.77565 6.44259 2.73958 5.05158 3.95717 3.8802C5.22549 2.66001 6.69675 1.70826 8.37093 1.02496C10.0451 0.341653 11.8208 0 13.6979 0H33.4837C35.4116 0 37.1872 0.341653 38.8107 1.02496C40.4849 1.70826 41.9308 2.66001 43.1484 3.8802C44.4167 5.05158 45.406 6.44259 46.1162 8.05324C46.8265 9.66389 47.1816 11.3722 47.1816 13.178V43.9268H43.3767H47.1816ZM24.3518 5.12479H33.4837C34.6506 5.12479 35.7414 5.34442 36.756 5.78369C37.7707 6.17415 38.6585 6.73544 39.4195 7.46755C40.1805 8.19966 40.7639 9.0538 41.1698 10.0299C41.6264 11.0061 41.8547 12.0555 41.8547 13.178V43.9268H38.0497V13.178C38.0497 11.9578 37.5931 10.9329 36.6799 10.1032C35.8175 9.22462 34.7521 8.78536 33.4837 8.78536H28.1568V43.9268H24.3518V5.12479ZM22.8298 5.12479V43.9268H19.0248V8.78536H13.6979C12.4296 8.78536 11.3388 9.22462 10.4256 10.1032C9.56316 10.9329 9.13193 11.9578 9.13193 13.178V43.9268H5.32696V13.178C5.32696 12.0555 5.52989 11.0061 5.93575 10.0299C6.39235 9.0538 7.00114 8.19966 7.76214 7.46755C8.52313 6.73544 9.41096 6.17415 10.4256 5.78369C11.4403 5.34442 12.531 5.12479 13.6979 5.12479H22.8298Z\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M55.0666 0H87.0284V3.66057H58.8716V30.7487C58.8716 32.0666 59.1252 33.3111 59.6326 34.4825C60.1399 35.6051 60.8248 36.6057 61.6873 37.4842C62.6005 38.3627 63.6658 39.046 64.8834 39.5341C66.101 40.0222 67.3947 40.2662 68.7645 40.2662H87.0284V43.9268H68.7645C66.8874 43.9268 65.1117 43.5851 63.4375 42.9018C61.7634 42.2185 60.2921 41.2912 59.0238 40.1198C57.8062 38.8996 56.8423 37.4842 56.132 35.8735C55.4217 34.2629 55.0666 32.5546 55.0666 30.7487V0ZM87.0284 17.5707V21.2313H60.3936V5.12479H87.0284V8.78536H64.1985V17.5707H87.0284ZM87.0284 26.3561H64.1985V30.7487C64.1985 31.9689 64.6298 33.0183 65.4922 33.8968C66.3547 34.7266 67.4454 35.1414 68.7645 35.1414H87.0284V38.802H68.7645C67.5976 38.802 66.5069 38.6068 65.4922 38.2163C64.4776 37.777 63.5897 37.1913 62.8288 36.4592C62.0678 35.7271 61.459 34.873 61.0024 33.8968C60.5965 32.9207 60.3936 31.8713 60.3936 30.7487V22.6955H87.0284V26.3561Z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M94.1165 3.66057V0H129.122V3.66057H94.1165ZM107.053 43.9268V8.78536H94.1165V5.12479H110.858V43.9268H107.053ZM112.38 5.12479H129.122V8.78536H116.185V43.9268H112.38V5.12479Z\",\"key\":2}),React.createElement(\"path\",{\"d\":\"M170.396 43.9268H166.591V13.178C166.591 11.8602 166.337 10.64 165.83 9.51747C165.322 8.34609 164.612 7.32113 163.699 6.44259C162.786 5.56406 161.72 4.88075 160.503 4.39268C159.336 3.9046 158.068 3.66057 156.698 3.66057H149.088C147.718 3.66057 146.424 3.9046 145.207 4.39268C144.04 4.88075 143 5.56406 142.087 6.44259C141.174 7.32113 140.463 8.34609 139.956 9.51747C139.449 10.64 139.195 11.8602 139.195 13.178V43.9268H135.39V13.178C135.39 11.3722 135.745 9.66389 136.455 8.05324C137.166 6.44259 138.13 5.05158 139.347 3.8802C140.615 2.66001 142.087 1.70826 143.761 1.02496C145.435 0.341653 147.211 0 149.088 0H156.698C158.575 0 160.351 0.341653 162.025 1.02496C163.699 1.70826 165.145 2.66001 166.362 3.8802C167.631 5.05158 168.62 6.44259 169.33 8.05324C170.041 9.66389 170.396 11.3722 170.396 13.178V43.9268ZM156.698 5.12479C157.865 5.12479 158.955 5.34442 159.97 5.78369C160.985 6.17415 161.873 6.73544 162.634 7.46755C163.395 8.19966 163.978 9.0538 164.384 10.0299C164.84 11.0061 165.069 12.0555 165.069 13.178V25.624H140.717V13.178C140.717 12.0555 140.92 11.0061 141.326 10.0299C141.782 9.0538 142.391 8.19966 143.152 7.46755C143.913 6.73544 144.801 6.17415 145.816 5.78369C146.83 5.34442 147.921 5.12479 149.088 5.12479H156.698ZM161.264 13.178C161.264 11.9578 160.807 10.9329 159.894 10.1032C159.032 9.22462 157.966 8.78536 156.698 8.78536H149.088C147.82 8.78536 146.729 9.22462 145.816 10.1032C144.953 10.9329 144.522 11.9578 144.522 13.178V21.9634H161.264V13.178ZM140.717 27.0882H165.069V43.9268H161.264V30.7487H144.522V43.9268H140.717V27.0882Z\",\"key\":3}),React.createElement(\"path\",{\"d\":\"M179.341 0H199.126C201.054 0 202.83 0.341653 204.453 1.02496C206.128 1.70826 207.573 2.66001 208.791 3.8802C210.059 5.05158 211.049 6.44259 211.759 8.05324C212.469 9.66389 212.824 11.3722 212.824 13.178V21.9634C212.824 23.7693 212.469 25.4775 211.759 27.0882C211.049 28.6988 210.059 30.1143 208.791 31.3344C207.573 32.5058 206.128 33.4332 204.453 34.1165C202.83 34.7998 201.054 35.1414 199.126 35.1414H188.473V43.9268H184.668V31.4809H199.126C200.496 31.4809 201.765 31.2368 202.931 30.7487C204.149 30.2607 205.214 29.5774 206.128 28.6988C207.041 27.8203 207.751 26.8197 208.258 25.6972C208.766 24.5258 209.019 23.2812 209.019 21.9634V13.178C209.019 11.8602 208.766 10.64 208.258 9.51747C207.751 8.34609 207.041 7.32113 206.128 6.44259C205.214 5.56406 204.149 4.88075 202.931 4.39268C201.765 3.9046 200.496 3.66057 199.126 3.66057H183.146V43.9268H179.341V0ZM184.668 30.0166V5.12479H199.126C200.293 5.12479 201.384 5.34442 202.399 5.78369C203.413 6.17415 204.301 6.73544 205.062 7.46755C205.823 8.19966 206.407 9.0538 206.812 10.0299C207.269 11.0061 207.497 12.0555 207.497 13.178V21.9634C207.497 23.086 207.269 24.1353 206.812 25.1115C206.407 26.0876 205.823 26.9418 205.062 27.6739C204.301 28.406 203.413 28.9917 202.399 29.4309C201.384 29.8214 200.293 30.0166 199.126 30.0166H184.668ZM188.473 26.3561H199.126C200.395 26.3561 201.46 25.9412 202.323 25.1115C203.236 24.2329 203.692 23.1836 203.692 21.9634V13.178C203.692 11.9578 203.236 10.9329 202.323 10.1032C201.46 9.22462 200.395 8.78536 199.126 8.78536H188.473V26.3561Z\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M247.732 35.1414V38.802H226.424C225.765 38.802 225.207 38.6068 224.75 38.2163C224.344 37.777 224.141 37.2402 224.141 36.6057V0H227.946V35.1414H247.732ZM218.814 0H222.619V36.6057C222.619 37.6306 222.974 38.5092 223.685 39.2413C224.446 39.9246 225.359 40.2662 226.424 40.2662H247.732V43.9268H226.424C224.293 43.9268 222.492 43.2191 221.021 41.8037C219.55 40.3882 218.814 38.6556 218.814 36.6057V0Z\",\"key\":5}),React.createElement(\"path\",{\"d\":\"M253.256 0H285.218V3.66057H257.061V30.7487C257.061 32.0666 257.315 33.3111 257.822 34.4825C258.33 35.6051 259.015 36.6057 259.877 37.4842C260.79 38.3627 261.856 39.046 263.073 39.5341C264.291 40.0222 265.585 40.2662 266.954 40.2662H285.218V43.9268H266.954C265.077 43.9268 263.302 43.5851 261.627 42.9018C259.953 42.2185 258.482 41.2912 257.214 40.1198C255.996 38.8996 255.032 37.4842 254.322 35.8735C253.612 34.2629 253.256 32.5546 253.256 30.7487V0ZM285.218 17.5707V21.2313H258.583V5.12479H285.218V8.78536H262.388V17.5707H285.218ZM285.218 26.3561H262.388V30.7487C262.388 31.9689 262.82 33.0183 263.682 33.8968C264.545 34.7266 265.635 35.1414 266.954 35.1414H285.218V38.802H266.954C265.787 38.802 264.697 38.6068 263.682 38.2163C262.667 37.777 261.78 37.1913 261.019 36.4592C260.258 35.7271 259.649 34.873 259.192 33.8968C258.786 32.9207 258.583 31.8713 258.583 30.7487V22.6955H285.218V26.3561Z\",\"key\":6}),React.createElement(\"path\",{\"d\":\"M306.115 11.1281L312.812 14.7887L309.692 17.2779L304.289 14.3494C302.97 13.6661 301.905 12.69 301.093 11.421C300.332 10.152 299.951 8.78536 299.951 7.32113V0.0732099H303.756V7.32113C303.756 8.15086 303.959 8.90737 304.365 9.59068C304.822 10.2252 305.405 10.7377 306.115 11.1281ZM322.705 15.3012C323.771 14.4226 324.608 13.6661 325.216 13.0316C325.825 12.3971 326.282 11.787 326.586 11.2013C326.891 10.6156 327.068 10.0299 327.119 9.44426C327.17 8.80976 327.195 8.10205 327.195 7.32113V0.0732099H331V7.32113C331 8.4437 330.949 9.41986 330.848 10.2496C330.746 11.0793 330.493 11.909 330.087 12.7388C329.681 13.5197 329.047 14.3738 328.184 15.3012C327.373 16.1797 326.231 17.2047 324.76 18.376L306.115 33.4576C305.507 33.9456 305.05 34.3605 304.746 34.7022C304.441 34.995 304.213 35.2634 304.061 35.5075C303.909 35.7515 303.807 36.02 303.756 36.3128C303.756 36.5568 303.756 36.8741 303.756 37.2646V44H299.951V37.2646C299.951 36.5324 299.977 35.9223 300.028 35.4343C300.078 34.9462 300.23 34.4581 300.484 33.9701C300.738 33.482 301.169 32.9695 301.778 32.4326C302.387 31.8469 303.224 31.1148 304.289 30.2363L322.705 15.3012ZM321.411 14.3494L303.528 28.9917C302.311 29.9678 301.372 30.7976 300.712 31.4809C300.053 32.1154 299.546 32.7255 299.19 33.3111C298.835 33.8968 298.607 34.4825 298.506 35.0682C298.455 35.6539 298.429 36.386 298.429 37.2646V44H294.625V37.2646C294.625 36.0932 294.65 35.0926 294.701 34.2629C294.802 33.4332 295.081 32.6278 295.538 31.8469C295.994 31.066 296.705 30.2119 297.668 29.2845C298.632 28.3572 299.977 27.1858 301.702 25.7704L319.509 11.1281C320.524 10.3472 321.158 9.7371 321.411 9.29784C321.716 8.80976 321.868 8.15086 321.868 7.32113V0.0732099H325.673V7.32113C325.673 8.05324 325.622 8.68774 325.521 9.22462C325.47 9.7127 325.293 10.2008 324.988 10.6889C324.734 11.1769 324.329 11.7138 323.771 12.2995C323.213 12.8364 322.426 13.5197 321.411 14.3494ZM303.528 15.6672L308.475 18.3028L305.355 20.8652L301.702 18.8153C299.52 17.6439 297.795 16.0333 296.527 13.9834C295.259 11.9334 294.625 9.7127 294.625 7.32113V0.0732099H298.429V7.32113C298.429 9.02939 298.886 10.64 299.799 12.1531C300.712 13.6661 301.955 14.8375 303.528 15.6672ZM327.195 44V37.2646C327.195 35.5563 326.738 33.97 325.825 32.5058C324.963 30.9928 323.72 29.8214 322.096 28.9917L317.226 26.3561L320.422 23.7937L323.999 25.7704C326.13 26.9906 327.829 28.6256 329.098 30.6755C330.366 32.6766 331 34.873 331 37.2646V44H327.195ZM325.673 44H321.868V37.2646C321.868 36.4836 321.64 35.7515 321.183 35.0682C320.777 34.3849 320.219 33.848 319.509 33.4576L312.888 29.8702L316.008 27.381L321.411 30.2363C322.731 30.9684 323.771 31.9689 324.532 33.2379C325.293 34.4581 325.673 35.8003 325.673 37.2646V44Z\",\"key\":7})]),React.createElement(\"path\",{\"d\":\"M47.1816 43.9268H43.3767V13.178C43.3767 11.8602 43.123 10.64 42.6157 9.51747C42.1083 8.34609 41.3981 7.32113 40.4849 6.44259C39.5717 5.56406 38.5063 4.88075 37.2887 4.39268C36.1218 3.9046 34.8535 3.66057 33.4837 3.66057H13.6979C12.3281 3.66057 11.0344 3.9046 9.81682 4.39268C8.64997 4.88075 7.60994 5.56406 6.69675 6.44259C5.78355 7.32113 5.07329 8.34609 4.56596 9.51747C4.05863 10.64 3.80497 11.8602 3.80497 13.178V43.9268H0V13.178C0 11.3722 0.35513 9.66389 1.06539 8.05324C1.77565 6.44259 2.73958 5.05158 3.95717 3.8802C5.22549 2.66001 6.69675 1.70826 8.37093 1.02496C10.0451 0.341653 11.8208 0 13.6979 0H33.4837C35.4116 0 37.1872 0.341653 38.8107 1.02496C40.4849 1.70826 41.9308 2.66001 43.1484 3.8802C44.4167 5.05158 45.406 6.44259 46.1162 8.05324C46.8265 9.66389 47.1816 11.3722 47.1816 13.178V43.9268H43.3767H47.1816ZM24.3518 5.12479H33.4837C34.6506 5.12479 35.7414 5.34442 36.756 5.78369C37.7707 6.17415 38.6585 6.73544 39.4195 7.46755C40.1805 8.19966 40.7639 9.0538 41.1698 10.0299C41.6264 11.0061 41.8547 12.0555 41.8547 13.178V43.9268H38.0497V13.178C38.0497 11.9578 37.5931 10.9329 36.6799 10.1032C35.8175 9.22462 34.7521 8.78536 33.4837 8.78536H28.1568V43.9268H24.3518V5.12479ZM22.8298 5.12479V43.9268H19.0248V8.78536H13.6979C12.4296 8.78536 11.3388 9.22462 10.4256 10.1032C9.56316 10.9329 9.13193 11.9578 9.13193 13.178V43.9268H5.32696V13.178C5.32696 12.0555 5.52989 11.0061 5.93575 10.0299C6.39235 9.0538 7.00114 8.19966 7.76214 7.46755C8.52313 6.73544 9.41096 6.17415 10.4256 5.78369C11.4403 5.34442 12.531 5.12479 13.6979 5.12479H22.8298Z\",\"fill\":\"url(#paint0_linear)\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M55.0666 0H87.0284V3.66057H58.8716V30.7487C58.8716 32.0666 59.1252 33.3111 59.6326 34.4825C60.1399 35.6051 60.8248 36.6057 61.6873 37.4842C62.6005 38.3627 63.6658 39.046 64.8834 39.5341C66.101 40.0222 67.3947 40.2662 68.7645 40.2662H87.0284V43.9268H68.7645C66.8874 43.9268 65.1117 43.5851 63.4375 42.9018C61.7634 42.2185 60.2921 41.2912 59.0238 40.1198C57.8062 38.8996 56.8423 37.4842 56.132 35.8735C55.4217 34.2629 55.0666 32.5546 55.0666 30.7487V0ZM87.0284 17.5707V21.2313H60.3936V5.12479H87.0284V8.78536H64.1985V17.5707H87.0284ZM87.0284 26.3561H64.1985V30.7487C64.1985 31.9689 64.6298 33.0183 65.4922 33.8968C66.3547 34.7266 67.4454 35.1414 68.7645 35.1414H87.0284V38.802H68.7645C67.5976 38.802 66.5069 38.6068 65.4922 38.2163C64.4776 37.777 63.5897 37.1913 62.8288 36.4592C62.0678 35.7271 61.459 34.873 61.0024 33.8968C60.5965 32.9207 60.3936 31.8713 60.3936 30.7487V22.6955H87.0284V26.3561Z\",\"fill\":\"url(#paint1_linear)\",\"key\":2}),React.createElement(\"path\",{\"d\":\"M94.1165 3.66057V0H129.122V3.66057H94.1165ZM107.053 43.9268V8.78536H94.1165V5.12479H110.858V43.9268H107.053ZM112.38 5.12479H129.122V8.78536H116.185V43.9268H112.38V5.12479Z\",\"fill\":\"url(#paint2_linear)\",\"key\":3}),React.createElement(\"path\",{\"d\":\"M170.396 43.9268H166.591V13.178C166.591 11.8602 166.337 10.64 165.83 9.51747C165.322 8.34609 164.612 7.32113 163.699 6.44259C162.786 5.56406 161.72 4.88075 160.503 4.39268C159.336 3.9046 158.068 3.66057 156.698 3.66057H149.088C147.718 3.66057 146.424 3.9046 145.207 4.39268C144.04 4.88075 143 5.56406 142.087 6.44259C141.174 7.32113 140.463 8.34609 139.956 9.51747C139.449 10.64 139.195 11.8602 139.195 13.178V43.9268H135.39V13.178C135.39 11.3722 135.745 9.66389 136.455 8.05324C137.166 6.44259 138.13 5.05158 139.347 3.8802C140.615 2.66001 142.087 1.70826 143.761 1.02496C145.435 0.341653 147.211 0 149.088 0H156.698C158.575 0 160.351 0.341653 162.025 1.02496C163.699 1.70826 165.145 2.66001 166.362 3.8802C167.631 5.05158 168.62 6.44259 169.33 8.05324C170.041 9.66389 170.396 11.3722 170.396 13.178V43.9268ZM156.698 5.12479C157.865 5.12479 158.955 5.34442 159.97 5.78369C160.985 6.17415 161.873 6.73544 162.634 7.46755C163.395 8.19966 163.978 9.0538 164.384 10.0299C164.84 11.0061 165.069 12.0555 165.069 13.178V25.624H140.717V13.178C140.717 12.0555 140.92 11.0061 141.326 10.0299C141.782 9.0538 142.391 8.19966 143.152 7.46755C143.913 6.73544 144.801 6.17415 145.816 5.78369C146.83 5.34442 147.921 5.12479 149.088 5.12479H156.698ZM161.264 13.178C161.264 11.9578 160.807 10.9329 159.894 10.1032C159.032 9.22462 157.966 8.78536 156.698 8.78536H149.088C147.82 8.78536 146.729 9.22462 145.816 10.1032C144.953 10.9329 144.522 11.9578 144.522 13.178V21.9634H161.264V13.178ZM140.717 27.0882H165.069V43.9268H161.264V30.7487H144.522V43.9268H140.717V27.0882Z\",\"fill\":\"url(#paint3_linear)\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M179.341 0H199.126C201.054 0 202.83 0.341653 204.453 1.02496C206.128 1.70826 207.573 2.66001 208.791 3.8802C210.059 5.05158 211.049 6.44259 211.759 8.05324C212.469 9.66389 212.824 11.3722 212.824 13.178V21.9634C212.824 23.7693 212.469 25.4775 211.759 27.0882C211.049 28.6988 210.059 30.1143 208.791 31.3344C207.573 32.5058 206.128 33.4332 204.453 34.1165C202.83 34.7998 201.054 35.1414 199.126 35.1414H188.473V43.9268H184.668V31.4809H199.126C200.496 31.4809 201.765 31.2368 202.931 30.7487C204.149 30.2607 205.214 29.5774 206.128 28.6988C207.041 27.8203 207.751 26.8197 208.258 25.6972C208.766 24.5258 209.019 23.2812 209.019 21.9634V13.178C209.019 11.8602 208.766 10.64 208.258 9.51747C207.751 8.34609 207.041 7.32113 206.128 6.44259C205.214 5.56406 204.149 4.88075 202.931 4.39268C201.765 3.9046 200.496 3.66057 199.126 3.66057H183.146V43.9268H179.341V0ZM184.668 30.0166V5.12479H199.126C200.293 5.12479 201.384 5.34442 202.399 5.78369C203.413 6.17415 204.301 6.73544 205.062 7.46755C205.823 8.19966 206.407 9.0538 206.812 10.0299C207.269 11.0061 207.497 12.0555 207.497 13.178V21.9634C207.497 23.086 207.269 24.1353 206.812 25.1115C206.407 26.0876 205.823 26.9418 205.062 27.6739C204.301 28.406 203.413 28.9917 202.399 29.4309C201.384 29.8214 200.293 30.0166 199.126 30.0166H184.668ZM188.473 26.3561H199.126C200.395 26.3561 201.46 25.9412 202.323 25.1115C203.236 24.2329 203.692 23.1836 203.692 21.9634V13.178C203.692 11.9578 203.236 10.9329 202.323 10.1032C201.46 9.22462 200.395 8.78536 199.126 8.78536H188.473V26.3561Z\",\"fill\":\"url(#paint4_linear)\",\"key\":5}),React.createElement(\"path\",{\"d\":\"M247.732 35.1414V38.802H226.424C225.765 38.802 225.207 38.6068 224.75 38.2163C224.344 37.777 224.141 37.2402 224.141 36.6057V0H227.946V35.1414H247.732ZM218.814 0H222.619V36.6057C222.619 37.6306 222.974 38.5092 223.685 39.2413C224.446 39.9246 225.359 40.2662 226.424 40.2662H247.732V43.9268H226.424C224.293 43.9268 222.492 43.2191 221.021 41.8037C219.55 40.3882 218.814 38.6556 218.814 36.6057V0Z\",\"fill\":\"url(#paint5_linear)\",\"key\":6}),React.createElement(\"path\",{\"d\":\"M253.256 0H285.218V3.66057H257.061V30.7487C257.061 32.0666 257.315 33.3111 257.822 34.4825C258.33 35.6051 259.015 36.6057 259.877 37.4842C260.79 38.3627 261.856 39.046 263.073 39.5341C264.291 40.0222 265.585 40.2662 266.954 40.2662H285.218V43.9268H266.954C265.077 43.9268 263.302 43.5851 261.627 42.9018C259.953 42.2185 258.482 41.2912 257.214 40.1198C255.996 38.8996 255.032 37.4842 254.322 35.8735C253.612 34.2629 253.256 32.5546 253.256 30.7487V0ZM285.218 17.5707V21.2313H258.583V5.12479H285.218V8.78536H262.388V17.5707H285.218ZM285.218 26.3561H262.388V30.7487C262.388 31.9689 262.82 33.0183 263.682 33.8968C264.545 34.7266 265.635 35.1414 266.954 35.1414H285.218V38.802H266.954C265.787 38.802 264.697 38.6068 263.682 38.2163C262.667 37.777 261.78 37.1913 261.019 36.4592C260.258 35.7271 259.649 34.873 259.192 33.8968C258.786 32.9207 258.583 31.8713 258.583 30.7487V22.6955H285.218V26.3561Z\",\"fill\":\"url(#paint6_linear)\",\"key\":7}),React.createElement(\"path\",{\"d\":\"M306.115 11.1281L312.812 14.7887L309.692 17.2779L304.289 14.3494C302.97 13.6661 301.905 12.69 301.093 11.421C300.332 10.152 299.951 8.78536 299.951 7.32113V0.0732099H303.756V7.32113C303.756 8.15086 303.959 8.90737 304.365 9.59068C304.822 10.2252 305.405 10.7377 306.115 11.1281ZM322.705 15.3012C323.771 14.4226 324.608 13.6661 325.216 13.0316C325.825 12.3971 326.282 11.787 326.586 11.2013C326.891 10.6156 327.068 10.0299 327.119 9.44426C327.17 8.80976 327.195 8.10205 327.195 7.32113V0.0732099H331V7.32113C331 8.4437 330.949 9.41986 330.848 10.2496C330.746 11.0793 330.493 11.909 330.087 12.7388C329.681 13.5197 329.047 14.3738 328.184 15.3012C327.373 16.1797 326.231 17.2047 324.76 18.376L306.115 33.4576C305.507 33.9456 305.05 34.3605 304.746 34.7022C304.441 34.995 304.213 35.2634 304.061 35.5075C303.909 35.7515 303.807 36.02 303.756 36.3128C303.756 36.5568 303.756 36.8741 303.756 37.2646V44H299.951V37.2646C299.951 36.5324 299.977 35.9223 300.028 35.4343C300.078 34.9462 300.23 34.4581 300.484 33.9701C300.738 33.482 301.169 32.9695 301.778 32.4326C302.387 31.8469 303.224 31.1148 304.289 30.2363L322.705 15.3012ZM321.411 14.3494L303.528 28.9917C302.311 29.9678 301.372 30.7976 300.712 31.4809C300.053 32.1154 299.546 32.7255 299.19 33.3111C298.835 33.8968 298.607 34.4825 298.506 35.0682C298.455 35.6539 298.429 36.386 298.429 37.2646V44H294.625V37.2646C294.625 36.0932 294.65 35.0926 294.701 34.2629C294.802 33.4332 295.081 32.6278 295.538 31.8469C295.994 31.066 296.705 30.2119 297.668 29.2845C298.632 28.3572 299.977 27.1858 301.702 25.7704L319.509 11.1281C320.524 10.3472 321.158 9.7371 321.411 9.29784C321.716 8.80976 321.868 8.15086 321.868 7.32113V0.0732099H325.673V7.32113C325.673 8.05324 325.622 8.68774 325.521 9.22462C325.47 9.7127 325.293 10.2008 324.988 10.6889C324.734 11.1769 324.329 11.7138 323.771 12.2995C323.213 12.8364 322.426 13.5197 321.411 14.3494ZM303.528 15.6672L308.475 18.3028L305.355 20.8652L301.702 18.8153C299.52 17.6439 297.795 16.0333 296.527 13.9834C295.259 11.9334 294.625 9.7127 294.625 7.32113V0.0732099H298.429V7.32113C298.429 9.02939 298.886 10.64 299.799 12.1531C300.712 13.6661 301.955 14.8375 303.528 15.6672ZM327.195 44V37.2646C327.195 35.5563 326.738 33.97 325.825 32.5058C324.963 30.9928 323.72 29.8214 322.096 28.9917L317.226 26.3561L320.422 23.7937L323.999 25.7704C326.13 26.9906 327.829 28.6256 329.098 30.6755C330.366 32.6766 331 34.873 331 37.2646V44H327.195ZM325.673 44H321.868V37.2646C321.868 36.4836 321.64 35.7515 321.183 35.0682C320.777 34.3849 320.219 33.848 319.509 33.4576L312.888 29.8702L316.008 27.381L321.411 30.2363C322.731 30.9684 323.771 31.9689 324.532 33.2379C325.293 34.4581 325.673 35.8003 325.673 37.2646V44Z\",\"fill\":\"url(#paint7_linear)\",\"key\":8}),React.createElement(\"path\",{\"d\":\"M47.1816 43.9268V44.4268H47.6816V43.9268H47.1816ZM43.3767 43.9268H42.8767V44.4268H43.3767V43.9268ZM42.6157 9.51747L42.1568 9.71621L42.16 9.72338L42.6157 9.51747ZM37.2887 4.39268L37.0957 4.854L37.1027 4.85678L37.2887 4.39268ZM9.81682 4.39268L9.63077 3.92852L9.62388 3.9314L9.81682 4.39268ZM6.69675 6.44259L6.3501 6.08227L6.69675 6.44259ZM4.56596 9.51747L5.02165 9.72341L5.02478 9.71618L4.56596 9.51747ZM3.80497 43.9268V44.4268H4.30497V43.9268H3.80497ZM0 43.9268H-0.5V44.4268H0V43.9268ZM3.95717 3.8802L3.61052 3.51987L3.61052 3.51987L3.95717 3.8802ZM8.37093 1.02496L8.18199 0.56203L8.37093 1.02496ZM38.8107 1.02496L38.6167 1.48583L38.6218 1.48789L38.8107 1.02496ZM43.1484 3.8802L42.7944 4.23337L42.8016 4.24059L42.8091 4.24751L43.1484 3.8802ZM24.3518 5.12479V4.62479H23.8518V5.12479H24.3518ZM36.756 5.78369L36.5574 6.24254L36.5668 6.24663L36.5764 6.25033L36.756 5.78369ZM39.4195 7.46755L39.7661 7.10723V7.10723L39.4195 7.46755ZM41.1698 10.0299L40.7081 10.2219L40.7123 10.2319L40.7169 10.2418L41.1698 10.0299ZM41.8547 43.9268V44.4268H42.3547V43.9268H41.8547ZM38.0497 43.9268H37.5497V44.4268H38.0497V43.9268ZM36.6799 10.1032L36.3231 10.4534L36.3331 10.4636L36.3437 10.4732L36.6799 10.1032ZM28.1568 8.78536V8.28536H27.6568V8.78536H28.1568ZM28.1568 43.9268V44.4268H28.6568V43.9268H28.1568ZM24.3518 43.9268H23.8518V44.4268H24.3518V43.9268ZM22.8298 5.12479H23.3298V4.62479H22.8298V5.12479ZM22.8298 43.9268V44.4268H23.3298V43.9268H22.8298ZM19.0248 43.9268H18.5248V44.4268H19.0248V43.9268ZM19.0248 8.78536H19.5248V8.28536H19.0248V8.78536ZM10.4256 10.1032L10.079 9.74283L10.4256 10.1032ZM9.13193 43.9268V44.4268H9.63193V43.9268H9.13193ZM5.32696 43.9268H4.82696V44.4268H5.32696V43.9268ZM5.93575 10.0299L5.48285 9.8181L5.47824 9.82795L5.47407 9.83799L5.93575 10.0299ZM10.4256 5.78369L10.6052 6.25033L10.6148 6.24663L10.6243 6.24254L10.4256 5.78369ZM55.0666 0V-0.5H54.5666V0H55.0666ZM87.0284 0H87.5284V-0.5H87.0284V0ZM87.0284 3.66057V4.16057H87.5284V3.66057H87.0284ZM58.8716 3.66057V3.16057H58.3716V3.66057H58.8716ZM59.6326 34.4825L59.1737 34.6813L59.1769 34.6884L59.6326 34.4825ZM61.6873 37.4842L61.3305 37.8345L61.3355 37.8396L61.3406 37.8445L61.6873 37.4842ZM64.8834 39.5341L65.0695 39.07L64.8834 39.5341ZM87.0284 40.2662H87.5284V39.7662H87.0284V40.2662ZM87.0284 43.9268V44.4268H87.5284V43.9268H87.0284ZM63.4375 42.9018L63.2486 43.3648L63.4375 42.9018ZM59.0238 40.1198L58.6698 40.473L58.6771 40.4802L58.6845 40.4871L59.0238 40.1198ZM56.132 35.8735L56.5895 35.6718L56.132 35.8735ZM87.0284 17.5707H87.5284V17.0707H87.0284V17.5707ZM87.0284 21.2313V21.7313H87.5284V21.2313H87.0284ZM60.3936 21.2313H59.8936V21.7313H60.3936V21.2313ZM60.3936 5.12479V4.62479H59.8936V5.12479H60.3936ZM87.0284 5.12479H87.5284V4.62479H87.0284V5.12479ZM87.0284 8.78536V9.28536H87.5284V8.78536H87.0284ZM64.1985 8.78536V8.28536H63.6985V8.78536H64.1985ZM64.1985 17.5707H63.6985V18.0707H64.1985V17.5707ZM87.0284 26.3561V26.8561H87.5284V26.3561H87.0284ZM64.1985 26.3561V25.8561H63.6985V26.3561H64.1985ZM65.4922 33.8968L65.1354 34.2471L65.1404 34.2522L65.1456 34.2572L65.4922 33.8968ZM87.0284 35.1414H87.5284V34.6414H87.0284V35.1414ZM87.0284 38.802V39.302H87.5284V38.802H87.0284ZM65.4922 38.2163L65.2936 38.6752L65.303 38.6792L65.3127 38.6829L65.4922 38.2163ZM61.0024 33.8968L60.5407 34.0888L60.5449 34.0988L60.5495 34.1087L61.0024 33.8968ZM60.3936 22.6955V22.1955H59.8936V22.6955H60.3936ZM87.0284 22.6955H87.5284V22.1955H87.0284V22.6955ZM94.1165 3.66057H93.6165V4.16057H94.1165V3.66057ZM94.1165 0V-0.5H93.6165V0H94.1165ZM129.122 0H129.622V-0.5H129.122V0ZM129.122 3.66057V4.16057H129.622V3.66057H129.122ZM107.053 43.9268H106.553V44.4268H107.053V43.9268ZM107.053 8.78536H107.553V8.28536H107.053V8.78536ZM94.1165 8.78536H93.6165V9.28536H94.1165V8.78536ZM94.1165 5.12479V4.62479H93.6165V5.12479H94.1165ZM110.858 5.12479H111.358V4.62479H110.858V5.12479ZM110.858 43.9268V44.4268H111.358V43.9268H110.858ZM112.38 5.12479V4.62479H111.88V5.12479H112.38ZM129.122 5.12479H129.622V4.62479H129.122V5.12479ZM129.122 8.78536V9.28536H129.622V8.78536H129.122ZM116.185 8.78536V8.28536H115.685V8.78536H116.185ZM116.185 43.9268V44.4268H116.685V43.9268H116.185ZM112.38 43.9268H111.88V44.4268H112.38V43.9268ZM170.396 43.9268V44.4268H170.896V43.9268H170.396ZM166.591 43.9268H166.091V44.4268H166.591V43.9268ZM165.83 9.51747L165.371 9.71621L165.374 9.72338L165.83 9.51747ZM160.503 4.39268L160.31 4.854L160.317 4.85678L160.503 4.39268ZM145.207 4.39268L145.021 3.92852L145.014 3.9314L145.207 4.39268ZM139.956 9.51747L140.412 9.72341L140.415 9.71618L139.956 9.51747ZM139.195 43.9268V44.4268H139.695V43.9268H139.195ZM135.39 43.9268H134.89V44.4268H135.39V43.9268ZM136.455 8.05324L136.913 8.25499L136.455 8.05324ZM139.347 3.8802L139 3.51987V3.51987L139.347 3.8802ZM166.362 3.8802L166.008 4.23337L166.016 4.24059L166.023 4.24751L166.362 3.8802ZM169.33 8.05324L169.788 7.8515V7.8515L169.33 8.05324ZM159.97 5.78369L159.771 6.24254L159.781 6.24663L159.791 6.25033L159.97 5.78369ZM164.384 10.0299L163.922 10.2219L163.926 10.2319L163.931 10.2418L164.384 10.0299ZM165.069 25.624V26.124H165.569V25.624H165.069ZM140.717 25.624H140.217V26.124H140.717V25.624ZM141.326 10.0299L140.873 9.8181L140.868 9.82795L140.864 9.83799L141.326 10.0299ZM143.152 7.46755L143.499 7.82788V7.82788L143.152 7.46755ZM145.816 5.78369L145.995 6.25033L146.005 6.24663L146.014 6.24254L145.816 5.78369ZM159.894 10.1032L159.537 10.4534L159.547 10.4636L159.558 10.4732L159.894 10.1032ZM145.816 10.1032L145.469 9.74283L145.816 10.1032ZM144.522 21.9634H144.022V22.4634H144.522V21.9634ZM161.264 21.9634V22.4634H161.764V21.9634H161.264ZM140.717 27.0882V26.5882H140.217V27.0882H140.717ZM165.069 27.0882H165.569V26.5882H165.069V27.0882ZM165.069 43.9268V44.4268H165.569V43.9268H165.069ZM161.264 43.9268H160.764V44.4268H161.264V43.9268ZM161.264 30.7487H161.764V30.2487H161.264V30.7487ZM144.522 30.7487V30.2487H144.022V30.7487H144.522ZM144.522 43.9268V44.4268H145.022V43.9268H144.522ZM140.717 43.9268H140.217V44.4268H140.717V43.9268ZM179.341 0V-0.5H178.841V0H179.341ZM204.453 1.02496L204.259 1.48583L204.264 1.48789L204.453 1.02496ZM208.791 3.8802L208.437 4.23337L208.444 4.24059L208.452 4.24751L208.791 3.8802ZM211.759 8.05324L212.216 7.8515V7.8515L211.759 8.05324ZM211.759 27.0882L212.216 27.2899L211.759 27.0882ZM208.791 31.3344L209.138 31.6948L208.791 31.3344ZM204.453 34.1165L204.264 33.6535L204.259 33.6556L204.453 34.1165ZM188.473 35.1414V34.6414H187.973V35.1414H188.473ZM188.473 43.9268V44.4268H188.973V43.9268H188.473ZM184.668 43.9268H184.168V44.4268H184.668V43.9268ZM184.668 31.4809V30.9809H184.168V31.4809H184.668ZM202.931 30.7487L202.745 30.2846L202.738 30.2875L202.931 30.7487ZM206.128 28.6988L205.781 28.3385L206.128 28.6988ZM208.258 25.6972L208.714 25.9031L208.717 25.8959L208.258 25.6972ZM208.258 9.51747L207.799 9.71621L207.803 9.72338L208.258 9.51747ZM206.128 6.44259L205.781 6.80292L206.128 6.44259ZM202.931 4.39268L202.738 4.854L202.745 4.85678L202.931 4.39268ZM183.146 3.66057V3.16057H182.646V3.66057H183.146ZM183.146 43.9268V44.4268H183.646V43.9268H183.146ZM179.341 43.9268H178.841V44.4268H179.341V43.9268ZM184.668 30.0166H184.168V30.5166H184.668V30.0166ZM184.668 5.12479V4.62479H184.168V5.12479H184.668ZM202.399 5.78369L202.2 6.24254L202.21 6.24663L202.219 6.25033L202.399 5.78369ZM206.812 10.0299L206.351 10.2219L206.355 10.2319L206.36 10.2418L206.812 10.0299ZM206.812 25.1115L206.36 24.8996L206.355 24.9095L206.351 24.9195L206.812 25.1115ZM202.399 29.4309L202.578 29.8976L202.588 29.8939L202.597 29.8898L202.399 29.4309ZM188.473 26.3561H187.973V26.8561H188.473V26.3561ZM202.323 25.1115L202.669 25.4718L202.323 25.1115ZM202.323 10.1032L201.966 10.4534L201.976 10.4636L201.986 10.4732L202.323 10.1032ZM188.473 8.78536V8.28536H187.973V8.78536H188.473ZM247.732 35.1414H248.232V34.6414H247.732V35.1414ZM247.732 38.802V39.302H248.232V38.802H247.732ZM224.75 38.2163L224.383 38.5556L224.403 38.5772L224.425 38.5963L224.75 38.2163ZM224.141 0V-0.5H223.641V0H224.141ZM227.946 0H228.446V-0.5H227.946V0ZM227.946 35.1414H227.446V35.6414H227.946V35.1414ZM218.814 0V-0.5H218.314V0H218.814ZM222.619 0H223.119V-0.5H222.619V0ZM223.685 39.2413L223.326 39.5894L223.338 39.6018L223.35 39.6133L223.685 39.2413ZM247.732 40.2662H248.232V39.7662H247.732V40.2662ZM247.732 43.9268V44.4268H248.232V43.9268H247.732ZM253.256 0V-0.5H252.756V0H253.256ZM285.218 0H285.718V-0.5H285.218V0ZM285.218 3.66057V4.16057H285.718V3.66057H285.218ZM257.061 3.66057V3.16057H256.561V3.66057H257.061ZM257.822 34.4825L257.364 34.6813L257.367 34.6884L257.822 34.4825ZM259.877 37.4842L259.52 37.8345L259.525 37.8396L259.53 37.8445L259.877 37.4842ZM263.073 39.5341L263.259 39.07L263.073 39.5341ZM285.218 40.2662H285.718V39.7662H285.218V40.2662ZM285.218 43.9268V44.4268H285.718V43.9268H285.218ZM261.627 42.9018L261.438 43.3648L261.627 42.9018ZM257.214 40.1198L256.86 40.473L256.867 40.4802L256.874 40.4871L257.214 40.1198ZM254.322 35.8735L254.779 35.6718L254.322 35.8735ZM285.218 17.5707H285.718V17.0707H285.218V17.5707ZM285.218 21.2313V21.7313H285.718V21.2313H285.218ZM258.583 21.2313H258.083V21.7313H258.583V21.2313ZM258.583 5.12479V4.62479H258.083V5.12479H258.583ZM285.218 5.12479H285.718V4.62479H285.218V5.12479ZM285.218 8.78536V9.28536H285.718V8.78536H285.218ZM262.388 8.78536V8.28536H261.888V8.78536H262.388ZM262.388 17.5707H261.888V18.0707H262.388V17.5707ZM285.218 26.3561V26.8561H285.718V26.3561H285.218ZM262.388 26.3561V25.8561H261.888V26.3561H262.388ZM263.682 33.8968L263.325 34.2471L263.33 34.2522L263.335 34.2572L263.682 33.8968ZM285.218 35.1414H285.718V34.6414H285.218V35.1414ZM285.218 38.802V39.302H285.718V38.802H285.218ZM263.682 38.2163L263.483 38.6752L263.493 38.6792L263.503 38.6829L263.682 38.2163ZM259.192 33.8968L258.73 34.0888L258.735 34.0988L258.739 34.1087L259.192 33.8968ZM258.583 22.6955V22.1955H258.083V22.6955H258.583ZM285.218 22.6955H285.718V22.1955H285.218V22.6955ZM306.115 11.1281L305.875 11.5663L305.876 11.5669L306.115 11.1281ZM312.812 14.7887L313.124 15.1795L313.712 14.7106L313.052 14.3499L312.812 14.7887ZM309.692 17.2779L309.454 17.7175L309.745 17.8753L310.004 17.6687L309.692 17.2779ZM304.289 14.3494L304.527 13.9098L304.519 13.9054L304.289 14.3494ZM301.093 11.421L300.664 11.6781L300.668 11.6843L300.672 11.6904L301.093 11.421ZM299.951 0.0732099V-0.42679H299.451V0.0732099H299.951ZM303.756 0.0732099H304.256V-0.42679H303.756V0.0732099ZM304.365 9.59068L303.935 9.84602L303.947 9.8649L303.959 9.88273L304.365 9.59068ZM322.705 15.3012L323.02 15.6895L323.023 15.6869L322.705 15.3012ZM326.586 11.2013L326.143 10.9707V10.9707L326.586 11.2013ZM327.119 9.44426L327.617 9.48741L327.617 9.48411L327.119 9.44426ZM327.195 0.0732099V-0.42679H326.695V0.0732099H327.195ZM331 0.0732099H331.5V-0.42679H331V0.0732099ZM330.087 12.7388L330.531 12.9694L330.536 12.9585L330.087 12.7388ZM328.184 15.3012L327.818 14.9606L327.817 14.9618L328.184 15.3012ZM324.76 18.376L324.448 17.9849L324.445 17.9873L324.76 18.376ZM306.115 33.4576L306.428 33.8477L306.43 33.8463L306.115 33.4576ZM304.746 34.7022L305.092 35.0625L305.106 35.0491L305.119 35.0348L304.746 34.7022ZM304.061 35.5075L304.485 35.7721V35.7721L304.061 35.5075ZM303.756 36.3128L303.264 36.2275L303.256 36.2698V36.3128H303.756ZM303.756 44V44.5H304.256V44H303.756ZM299.951 44H299.451V44.5H299.951V44ZM300.028 35.4343L300.525 35.486V35.486L300.028 35.4343ZM300.484 33.9701L300.928 34.2006L300.484 33.9701ZM301.778 32.4326L302.109 32.8076L302.117 32.8004L302.124 32.7929L301.778 32.4326ZM304.289 30.2363L303.974 29.8479L303.971 29.8505L304.289 30.2363ZM321.411 14.3494L321.095 13.9624L321.095 13.9625L321.411 14.3494ZM303.528 28.9917L303.841 29.3818L303.845 29.3785L303.528 28.9917ZM300.712 31.4809L301.059 31.8412L301.066 31.8348L301.072 31.8281L300.712 31.4809ZM299.19 33.3111L299.618 33.5704V33.5704L299.19 33.3111ZM298.506 35.0682L298.013 34.9829L298.009 35.0039L298.007 35.0251L298.506 35.0682ZM298.429 44V44.5H298.929V44H298.429ZM294.625 44H294.125V44.5H294.625V44ZM294.701 34.2629L294.204 34.2022L294.202 34.2173L294.202 34.2324L294.701 34.2629ZM301.702 25.7704L302.019 26.1569L302.019 26.1566L301.702 25.7704ZM319.509 11.1281L319.204 10.7319L319.198 10.7368L319.191 10.7419L319.509 11.1281ZM321.411 9.29784L320.987 9.03324L320.983 9.04044L320.979 9.0478L321.411 9.29784ZM321.868 0.0732099V-0.42679H321.368V0.0732099H321.868ZM325.673 0.0732099H326.173V-0.42679H325.673V0.0732099ZM325.521 9.22462L325.03 9.13177L325.026 9.15223L325.024 9.17293L325.521 9.22462ZM324.988 10.6889L324.564 10.4243L324.554 10.4409L324.544 10.4583L324.988 10.6889ZM323.771 12.2995L324.117 12.6598L324.125 12.6523L324.133 12.6444L323.771 12.2995ZM303.528 15.6672L303.763 15.2259L303.761 15.225L303.528 15.6672ZM308.475 18.3028L308.792 18.6892L309.371 18.2138L308.71 17.8616L308.475 18.3028ZM305.355 20.8652L305.11 21.3013L305.408 21.4685L305.672 21.2516L305.355 20.8652ZM301.702 18.8153L301.946 18.3792L301.938 18.3748L301.702 18.8153ZM296.527 13.9834L296.102 14.2464L296.527 13.9834ZM294.625 0.0732099V-0.42679H294.125V0.0732099H294.625ZM298.429 0.0732099H298.929V-0.42679H298.429V0.0732099ZM299.799 12.1531L300.227 11.8947L299.799 12.1531ZM327.195 44H326.695V44.5H327.195V44ZM325.825 32.5058L325.391 32.7534L325.396 32.762L325.401 32.7704L325.825 32.5058ZM322.096 28.9917L321.858 29.4315L321.869 29.4369L322.096 28.9917ZM317.226 26.3561L316.913 25.966L316.325 26.4372L316.988 26.7958L317.226 26.3561ZM320.422 23.7937L320.664 23.3561L320.371 23.194L320.109 23.4036L320.422 23.7937ZM323.999 25.7704L324.247 25.3364L324.241 25.3328L323.999 25.7704ZM329.098 30.6755L328.672 30.9386L328.675 30.9432L329.098 30.6755ZM331 44V44.5H331.5V44H331ZM325.673 44V44.5H326.173V44H325.673ZM321.868 44H321.368V44.5H321.868V44ZM321.183 35.0682L320.753 35.3236L320.76 35.335L320.767 35.346L321.183 35.0682ZM319.509 33.4576L319.75 33.0194L319.747 33.018L319.509 33.4576ZM312.888 29.8702L312.577 29.4794L311.986 29.9502L312.65 30.3098L312.888 29.8702ZM316.008 27.381L316.242 26.939L315.953 26.786L315.697 26.9902L316.008 27.381ZM321.411 30.2363L321.654 29.799L321.645 29.7942L321.411 30.2363ZM324.532 33.2379L324.103 33.4951L324.107 33.5025L324.532 33.2379ZM47.1816 43.4268H43.3767V44.4268H47.1816V43.4268ZM43.8767 43.9268V13.178H42.8767V43.9268H43.8767ZM43.8767 13.178C43.8767 11.7943 43.6099 10.5033 43.0713 9.31155L42.16 9.72338C42.6361 10.7768 42.8767 11.9262 42.8767 13.178H43.8767ZM43.0745 9.31876C42.541 8.08707 41.7928 7.00706 40.8315 6.08227L40.1382 6.80292C41.0033 7.6352 41.6756 8.60511 42.1568 9.71618L43.0745 9.31876ZM40.8315 6.08227C39.8703 5.15756 38.7499 4.43973 37.4747 3.92858L37.1027 4.85678C38.2627 5.32177 39.273 5.97056 40.1382 6.80292L40.8315 6.08227ZM37.4816 3.9314C36.2488 3.41571 34.9142 3.16057 33.4837 3.16057V4.16057C34.7928 4.16057 35.9949 4.39349 37.0958 4.85395L37.4816 3.9314ZM33.4837 3.16057H13.6979V4.16057H33.4837V3.16057ZM13.6979 3.16057C12.2672 3.16057 10.9101 3.41574 9.63079 3.92858L10.0029 4.85678C11.1587 4.39346 12.389 4.16057 13.6979 4.16057V3.16057ZM9.62388 3.9314C8.39988 4.44338 7.30776 5.16095 6.3501 6.08227L7.0434 6.80292C7.91212 5.96716 8.90005 5.31812 10.0098 4.85395L9.62388 3.9314ZM6.3501 6.08227C5.38882 7.00706 4.6406 8.08707 4.10715 9.31876L5.02478 9.71618C5.50599 8.60511 6.17829 7.6352 7.0434 6.80292L6.3501 6.08227ZM4.11033 9.31155C3.57176 10.5033 3.30497 11.7943 3.30497 13.178H4.30497C4.30497 11.9262 4.54551 10.7768 5.02159 9.72338L4.11033 9.31155ZM3.30497 13.178V43.9268H4.30497V13.178H3.30497ZM3.80497 43.4268H0V44.4268H3.80497V43.4268ZM0.5 43.9268V13.178H-0.5V43.9268H0.5ZM0.5 13.178C0.5 11.4398 0.841389 9.8004 1.52288 8.25499L0.607899 7.8515C-0.131128 9.52738 -0.5 11.3045 -0.5 13.178H0.5ZM1.52288 8.25499C2.20799 6.70137 3.13511 5.36488 4.30382 4.24052L3.61052 3.51987C2.34405 4.73828 1.34331 6.18382 0.607899 7.8515L1.52288 8.25499ZM4.30382 4.24052C5.52528 3.06542 6.94264 2.14795 8.55987 1.48789L8.18199 0.56203C6.45086 1.26858 4.92571 2.2546 3.61052 3.51987L4.30382 4.24052ZM8.55987 1.48789C10.1718 0.829994 11.883 0.5 13.6979 0.5V-0.5C11.7585 -0.5 9.91845 -0.146689 8.18199 0.56203L8.55987 1.48789ZM13.6979 0.5H33.4837V-0.5H13.6979V0.5ZM33.4837 0.5C35.3513 0.5 37.0603 0.830689 38.6167 1.4858L39.0047 0.564114C37.3142 -0.147383 35.4719 -0.5 33.4837 -0.5V0.5ZM38.6218 1.48789C40.2373 2.14724 41.6263 3.06271 42.7944 4.23337L43.5023 3.52702C42.2353 2.25731 40.7325 1.26929 38.9996 0.562031L38.6218 1.48789ZM42.8091 4.24751C44.0261 5.37146 44.9756 6.70579 45.6587 8.25499L46.5737 7.8515C45.8364 6.1794 44.8073 4.73169 43.4876 3.51288L42.8091 4.24751ZM45.6587 8.25499C46.3402 9.8004 46.6816 11.4398 46.6816 13.178H47.6816C47.6816 11.3045 47.3128 9.52738 46.5737 7.8515L45.6587 8.25499ZM46.6816 13.178V43.9268H47.6816V13.178H46.6816ZM47.1816 43.4268H43.3767V44.4268H47.1816V43.4268ZM43.3767 44.4268H47.1816V43.4268H43.3767V44.4268ZM24.3518 5.62479H33.4837V4.62479H24.3518V5.62479ZM33.4837 5.62479C34.5861 5.62479 35.6089 5.83191 36.5574 6.24254L36.9547 5.32485C35.8739 4.85694 34.7151 4.62479 33.4837 4.62479V5.62479ZM36.5764 6.25033C37.5308 6.61757 38.3613 7.14336 39.0728 7.82788L39.7661 7.10723C38.9557 6.32751 38.0106 5.73073 36.9356 5.31705L36.5764 6.25033ZM39.0728 7.82788C39.7843 8.51231 40.3286 9.30911 40.7081 10.2219L41.6315 9.83799C41.1993 8.79848 40.5767 7.88702 39.7661 7.10723L39.0728 7.82788ZM40.7169 10.2418C41.1411 11.1489 41.3547 12.1255 41.3547 13.178H42.3547C42.3547 11.9854 42.1116 10.8633 41.6227 9.8181L40.7169 10.2418ZM41.3547 13.178V43.9268H42.3547V13.178H41.3547ZM41.8547 43.4268H38.0497V44.4268H41.8547V43.4268ZM38.5497 43.9268V13.178H37.5497V43.9268H38.5497ZM38.5497 13.178C38.5497 11.8151 38.0323 10.6564 37.0162 9.7331L36.3437 10.4732C37.1539 11.2094 37.5497 12.1006 37.5497 13.178H38.5497ZM37.0367 9.75288C36.0771 8.77538 34.8817 8.28536 33.4837 8.28536V9.28536C34.6224 9.28536 35.5578 9.67387 36.3231 10.4534L37.0367 9.75288ZM33.4837 8.28536H28.1568V9.28536H33.4837V8.28536ZM27.6568 8.78536V43.9268H28.6568V8.78536H27.6568ZM28.1568 43.4268H24.3518V44.4268H28.1568V43.4268ZM24.8518 43.9268V5.12479H23.8518V43.9268H24.8518ZM22.3298 5.12479V43.9268H23.3298V5.12479H22.3298ZM22.8298 43.4268H19.0248V44.4268H22.8298V43.4268ZM19.5248 43.9268V8.78536H18.5248V43.9268H19.5248ZM19.0248 8.28536H13.6979V9.28536H19.0248V8.28536ZM13.6979 8.28536C12.3004 8.28536 11.0854 8.77459 10.079 9.74283L10.7723 10.4635C11.5922 9.67465 12.5587 9.28536 13.6979 9.28536V8.28536ZM10.079 9.74283C9.11639 10.6689 8.63193 11.8249 8.63193 13.178H9.63193C9.63193 12.0908 10.0099 11.1969 10.7723 10.4635L10.079 9.74283ZM8.63193 13.178V43.9268H9.63193V13.178H8.63193ZM9.13193 43.4268H5.32696V44.4268H9.13193V43.4268ZM5.82696 43.9268V13.178H4.82696V43.9268H5.82696ZM5.82696 13.178C5.82696 12.1172 6.01841 11.1335 6.39744 10.2219L5.47407 9.83799C5.04137 10.8787 4.82696 11.9937 4.82696 13.178H5.82696ZM6.38866 10.2418C6.81979 9.32007 7.39294 8.51655 8.10879 7.82788L7.41549 7.10723C6.60935 7.88277 5.96491 8.78752 5.48285 9.8181L6.38866 10.2418ZM8.10879 7.82788C8.8203 7.14336 9.65088 6.61757 10.6052 6.25033L10.246 5.31705C9.17105 5.73073 8.22596 6.32751 7.41549 7.10723L8.10879 7.82788ZM10.6243 6.24254C11.5728 5.83191 12.5955 5.62479 13.6979 5.62479V4.62479C12.4666 4.62479 11.3078 4.85694 10.227 5.32485L10.6243 6.24254ZM13.6979 5.62479H22.8298V4.62479H13.6979V5.62479ZM55.0666 0.5H87.0284V-0.5H55.0666V0.5ZM86.5284 0V3.66057H87.5284V0H86.5284ZM87.0284 3.16057H58.8716V4.16057H87.0284V3.16057ZM58.3716 3.66057V30.7487H59.3716V3.66057H58.3716ZM58.3716 30.7487C58.3716 32.1326 58.6384 33.4451 59.1738 34.6812L60.0914 34.2838C59.6121 33.1772 59.3716 32.0005 59.3716 30.7487H58.3716ZM59.1769 34.6884C59.7085 35.8645 60.4268 36.914 61.3305 37.8345L62.0441 37.1339C61.2228 36.2973 60.5713 35.3457 60.0882 34.2766L59.1769 34.6884ZM61.3406 37.8445C62.3018 38.7692 63.4222 39.4871 64.6974 39.9982L65.0695 39.07C63.9095 38.605 62.8991 37.9562 62.0339 37.1239L61.3406 37.8445ZM64.6974 39.9982C65.9768 40.511 67.3338 40.7662 68.7645 40.7662V39.7662C67.4556 39.7662 66.2253 39.5333 65.0695 39.07L64.6974 39.9982ZM68.7645 40.7662H87.0284V39.7662H68.7645V40.7662ZM86.5284 40.2662V43.9268H87.5284V40.2662H86.5284ZM87.0284 43.4268H68.7645V44.4268H87.0284V43.4268ZM68.7645 43.4268C66.9497 43.4268 65.2384 43.0968 63.6265 42.4389L63.2486 43.3648C64.9851 44.0735 66.8251 44.4268 68.7645 44.4268V43.4268ZM63.6265 42.4389C62.0051 41.7771 60.5853 40.8814 59.363 39.7525L58.6845 40.4871C59.9989 41.701 61.5217 42.6599 63.2486 43.3648L63.6265 42.4389ZM59.3777 39.7666C58.2046 38.591 57.2754 37.2272 56.5895 35.6718L55.6745 36.0753C56.4091 37.7411 57.4078 39.2082 58.6698 40.473L59.3777 39.7666ZM56.5895 35.6718C55.908 34.1264 55.5666 32.487 55.5666 30.7487H54.5666C54.5666 32.6223 54.9355 34.3994 55.6745 36.0753L56.5895 35.6718ZM55.5666 30.7487V0H54.5666V30.7487H55.5666ZM86.5284 17.5707V21.2313H87.5284V17.5707H86.5284ZM87.0284 20.7313H60.3936V21.7313H87.0284V20.7313ZM60.8936 21.2313V5.12479H59.8936V21.2313H60.8936ZM60.3936 5.62479H87.0284V4.62479H60.3936V5.62479ZM86.5284 5.12479V8.78536H87.5284V5.12479H86.5284ZM87.0284 8.28536H64.1985V9.28536H87.0284V8.28536ZM63.6985 8.78536V17.5707H64.6985V8.78536H63.6985ZM64.1985 18.0707H87.0284V17.0707H64.1985V18.0707ZM87.0284 25.8561H64.1985V26.8561H87.0284V25.8561ZM63.6985 26.3561V30.7487H64.6985V26.3561H63.6985ZM63.6985 30.7487C63.6985 32.1013 64.1821 33.276 65.1354 34.2471L65.849 33.5466C65.0774 32.7606 64.6985 31.8366 64.6985 30.7487H63.6985ZM65.1456 34.2572C66.1111 35.186 67.3306 35.6414 68.7645 35.6414V34.6414C67.5603 34.6414 66.5983 34.2671 65.8389 33.5365L65.1456 34.2572ZM68.7645 35.6414H87.0284V34.6414H68.7645V35.6414ZM86.5284 35.1414V38.802H87.5284V35.1414H86.5284ZM87.0284 38.302H68.7645V39.302H87.0284V38.302ZM68.7645 38.302C67.6545 38.302 66.6251 38.1165 65.6718 37.7497L65.3127 38.6829C66.3887 39.097 67.5408 39.302 68.7645 39.302V38.302ZM65.6909 37.7575C64.7284 37.3408 63.8913 36.7877 63.1754 36.0989L62.4821 36.8196C63.2882 37.595 64.2267 38.2133 65.2936 38.6752L65.6909 37.7575ZM63.1754 36.0989C62.4596 35.4102 61.8864 34.6067 61.4553 33.685L60.5495 34.1087C61.0315 35.1393 61.676 36.044 62.4821 36.8196L63.1754 36.0989ZM61.4641 33.7049C61.085 32.7933 60.8936 31.8096 60.8936 30.7487H59.8936C59.8936 31.9331 60.108 33.0481 60.5407 34.0888L61.4641 33.7049ZM60.8936 30.7487V22.6955H59.8936V30.7487H60.8936ZM60.3936 23.1955H87.0284V22.1955H60.3936V23.1955ZM86.5284 22.6955V26.3561H87.5284V22.6955H86.5284ZM94.6165 3.66057V0H93.6165V3.66057H94.6165ZM94.1165 0.5H129.122V-0.5H94.1165V0.5ZM128.622 0V3.66057H129.622V0H128.622ZM129.122 3.16057H94.1165V4.16057H129.122V3.16057ZM107.553 43.9268V8.78536H106.553V43.9268H107.553ZM107.053 8.28536H94.1165V9.28536H107.053V8.28536ZM94.6165 8.78536V5.12479H93.6165V8.78536H94.6165ZM94.1165 5.62479H110.858V4.62479H94.1165V5.62479ZM110.358 5.12479V43.9268H111.358V5.12479H110.358ZM110.858 43.4268H107.053V44.4268H110.858V43.4268ZM112.38 5.62479H129.122V4.62479H112.38V5.62479ZM128.622 5.12479V8.78536H129.622V5.12479H128.622ZM129.122 8.28536H116.185V9.28536H129.122V8.28536ZM115.685 8.78536V43.9268H116.685V8.78536H115.685ZM116.185 43.4268H112.38V44.4268H116.185V43.4268ZM112.88 43.9268V5.12479H111.88V43.9268H112.88ZM170.396 43.4268H166.591V44.4268H170.396V43.4268ZM167.091 43.9268V13.178H166.091V43.9268H167.091ZM167.091 13.178C167.091 11.7943 166.824 10.5033 166.285 9.31155L165.374 9.72338C165.85 10.7768 166.091 11.9262 166.091 13.178H167.091ZM166.289 9.31876C165.755 8.08707 165.007 7.00706 164.046 6.08227L163.352 6.80292C164.217 7.6352 164.89 8.60511 165.371 9.71618L166.289 9.31876ZM164.046 6.08227C163.084 5.15756 161.964 4.43973 160.689 3.92858L160.317 4.85678C161.477 5.32177 162.487 5.97056 163.352 6.80292L164.046 6.08227ZM160.696 3.9314C159.463 3.41571 158.128 3.16057 156.698 3.16057V4.16057C158.007 4.16057 159.209 4.39349 160.31 4.85395L160.696 3.9314ZM156.698 3.16057H149.088V4.16057H156.698V3.16057ZM149.088 3.16057C147.657 3.16057 146.3 3.41574 145.021 3.92858L145.393 4.85678C146.549 4.39346 147.779 4.16057 149.088 4.16057V3.16057ZM145.014 3.9314C143.79 4.44338 142.698 5.16095 141.74 6.08227L142.433 6.80292C143.302 5.96716 144.29 5.31812 145.4 4.85395L145.014 3.9314ZM141.74 6.08227C140.779 7.00706 140.031 8.08707 139.497 9.31876L140.415 9.71618C140.896 8.60511 141.568 7.6352 142.433 6.80292L141.74 6.08227ZM139.5 9.31155C138.962 10.5033 138.695 11.7943 138.695 13.178H139.695C139.695 11.9262 139.935 10.7768 140.412 9.72338L139.5 9.31155ZM138.695 13.178V43.9268H139.695V13.178H138.695ZM139.195 43.4268H135.39V44.4268H139.195V43.4268ZM135.89 43.9268V13.178H134.89V43.9268H135.89ZM135.89 13.178C135.89 11.4398 136.231 9.8004 136.913 8.25499L135.998 7.8515C135.259 9.52738 134.89 11.3045 134.89 13.178H135.89ZM136.913 8.25499C137.598 6.70137 138.525 5.36488 139.694 4.24052L139 3.51987C137.734 4.73828 136.733 6.18382 135.998 7.8515L136.913 8.25499ZM139.694 4.24052C140.915 3.06542 142.333 2.14795 143.95 1.48789L143.572 0.56203C141.841 1.26858 140.316 2.2546 139 3.51987L139.694 4.24052ZM143.95 1.48789C145.562 0.829994 147.273 0.5 149.088 0.5V-0.5C147.148 -0.5 145.308 -0.146689 143.572 0.56203L143.95 1.48789ZM149.088 0.5H156.698V-0.5H149.088V0.5ZM156.698 0.5C158.513 0.5 160.224 0.829994 161.836 1.48789L162.214 0.562031C160.477 -0.146689 158.637 -0.5 156.698 -0.5V0.5ZM161.836 1.48789C163.451 2.14724 164.84 3.06271 166.008 4.23337L166.716 3.52702C165.449 2.25731 163.947 1.26929 162.214 0.562031L161.836 1.48789ZM166.023 4.24751C167.24 5.37147 168.19 6.70579 168.873 8.25499L169.788 7.8515C169.05 6.1794 168.021 4.73169 166.702 3.51289L166.023 4.24751ZM168.873 8.25499C169.554 9.8004 169.896 11.4398 169.896 13.178H170.896C170.896 11.3045 170.527 9.52738 169.788 7.8515L168.873 8.25499ZM169.896 13.178V43.9268H170.896V13.178H169.896ZM156.698 5.62479C157.8 5.62479 158.823 5.83191 159.771 6.24254L160.169 5.32485C159.088 4.85694 157.929 4.62479 156.698 4.62479V5.62479ZM159.791 6.25033C160.745 6.61757 161.575 7.14336 162.287 7.82788L162.98 7.10723C162.17 6.32751 161.225 5.73073 160.15 5.31705L159.791 6.25033ZM162.287 7.82788C162.998 8.51231 163.543 9.30911 163.922 10.2219L164.846 9.83799C164.413 8.79848 163.791 7.88702 162.98 7.10723L162.287 7.82788ZM163.931 10.2418C164.355 11.1488 164.569 12.1255 164.569 13.178H165.569C165.569 11.9854 165.326 10.8634 164.837 9.8181L163.931 10.2418ZM164.569 13.178V25.624H165.569V13.178H164.569ZM165.069 25.124H140.717V26.124H165.069V25.124ZM141.217 25.624V13.178H140.217V25.624H141.217ZM141.217 13.178C141.217 12.1172 141.408 11.1335 141.787 10.2219L140.864 9.83799C140.431 10.8787 140.217 11.9937 140.217 13.178H141.217ZM141.779 10.2418C142.21 9.32007 142.783 8.51655 143.499 7.82788L142.805 7.10723C141.999 7.88277 141.355 8.78752 140.873 9.8181L141.779 10.2418ZM143.499 7.82788C144.21 7.14336 145.041 6.61757 145.995 6.25033L145.636 5.31705C144.561 5.73073 143.616 6.32751 142.805 7.10723L143.499 7.82788ZM146.014 6.24254C146.963 5.83191 147.985 5.62479 149.088 5.62479V4.62479C147.857 4.62479 146.698 4.85694 145.617 5.32485L146.014 6.24254ZM149.088 5.62479H156.698V4.62479H149.088V5.62479ZM161.764 13.178C161.764 11.8151 161.246 10.6564 160.23 9.7331L159.558 10.4732C160.368 11.2094 160.764 12.1006 160.764 13.178H161.764ZM160.251 9.75288C159.291 8.77538 158.096 8.28536 156.698 8.28536V9.28536C157.836 9.28536 158.772 9.67387 159.537 10.4534L160.251 9.75288ZM156.698 8.28536H149.088V9.28536H156.698V8.28536ZM149.088 8.28536C147.69 8.28536 146.475 8.77459 145.469 9.74283L146.162 10.4635C146.982 9.67466 147.949 9.28536 149.088 9.28536V8.28536ZM145.469 9.74283C144.506 10.6689 144.022 11.8249 144.022 13.178H145.022C145.022 12.0908 145.4 11.1969 146.162 10.4635L145.469 9.74283ZM144.022 13.178V21.9634H145.022V13.178H144.022ZM144.522 22.4634H161.264V21.4634H144.522V22.4634ZM161.764 21.9634V13.178H160.764V21.9634H161.764ZM140.717 27.5882H165.069V26.5882H140.717V27.5882ZM164.569 27.0882V43.9268H165.569V27.0882H164.569ZM165.069 43.4268H161.264V44.4268H165.069V43.4268ZM161.764 43.9268V30.7487H160.764V43.9268H161.764ZM161.264 30.2487H144.522V31.2487H161.264V30.2487ZM144.022 30.7487V43.9268H145.022V30.7487H144.022ZM144.522 43.4268H140.717V44.4268H144.522V43.4268ZM141.217 43.9268V27.0882H140.217V43.9268H141.217ZM179.341 0.5H199.126V-0.5H179.341V0.5ZM199.126 0.5C200.994 0.5 202.703 0.830689 204.259 1.4858L204.647 0.564114C202.957 -0.147383 201.115 -0.5 199.126 -0.5V0.5ZM204.264 1.48789C205.88 2.14724 207.269 3.06271 208.437 4.23337L209.145 3.52702C207.878 2.25731 206.375 1.26929 204.642 0.56203L204.264 1.48789ZM208.452 4.24751C209.669 5.37146 210.618 6.70579 211.301 8.25499L212.216 7.8515C211.479 6.1794 210.45 4.73169 209.13 3.51289L208.452 4.24751ZM211.301 8.25499C211.983 9.8004 212.324 11.4398 212.324 13.178H213.324C213.324 11.3045 212.955 9.52738 212.216 7.8515L211.301 8.25499ZM212.324 13.178V21.9634H213.324V13.178H212.324ZM212.324 21.9634C212.324 23.7016 211.983 25.341 211.301 26.8864L212.216 27.2899C212.955 25.614 213.324 23.8369 213.324 21.9634H212.324ZM211.301 26.8864C210.617 28.4375 209.666 29.7991 208.444 30.9741L209.138 31.6948C210.453 30.4294 211.48 28.9601 212.216 27.2899L211.301 26.8864ZM208.444 30.9741C207.276 32.0986 205.884 32.9925 204.264 33.6535L204.642 34.5794C206.371 33.8739 207.871 32.913 209.138 31.6948L208.444 30.9741ZM204.259 33.6556C202.703 34.3107 200.994 34.6414 199.126 34.6414V35.6414C201.115 35.6414 202.957 35.2888 204.647 34.5773L204.259 33.6556ZM199.126 34.6414H188.473V35.6414H199.126V34.6414ZM187.973 35.1414V43.9268H188.973V35.1414H187.973ZM188.473 43.4268H184.668V44.4268H188.473V43.4268ZM185.168 43.9268V31.4809H184.168V43.9268H185.168ZM184.668 31.9809H199.126V30.9809H184.668V31.9809ZM199.126 31.9809C200.557 31.9809 201.891 31.7257 203.124 31.21L202.738 30.2875C201.638 30.7479 200.436 30.9809 199.126 30.9809V31.9809ZM203.117 31.2129C204.393 30.7017 205.513 29.9839 206.474 29.0592L205.781 28.3385C204.916 29.1709 203.905 29.8197 202.745 30.2846L203.117 31.2129ZM206.474 29.0592C207.432 28.1378 208.18 27.0853 208.714 25.9031L207.803 25.4913C207.322 26.5542 206.65 27.5028 205.781 28.3385L206.474 29.0592ZM208.717 25.8959C209.253 24.6597 209.519 23.3473 209.519 21.9634H208.519C208.519 23.2151 208.279 24.3918 207.8 25.4985L208.717 25.8959ZM209.519 21.9634V13.178H208.519V21.9634H209.519ZM209.519 13.178C209.519 11.7943 209.253 10.5033 208.714 9.31155L207.803 9.72338C208.279 10.7768 208.519 11.9262 208.519 13.178H209.519ZM208.717 9.31876C208.184 8.08707 207.435 7.00706 206.474 6.08227L205.781 6.80292C206.646 7.6352 207.318 8.60511 207.8 9.71618L208.717 9.31876ZM206.474 6.08227C205.513 5.15756 204.393 4.43973 203.117 3.92858L202.745 4.85678C203.905 5.32177 204.916 5.97056 205.781 6.80292L206.474 6.08227ZM203.124 3.9314C201.891 3.41571 200.557 3.16057 199.126 3.16057V4.16057C200.436 4.16057 201.638 4.39349 202.738 4.85395L203.124 3.9314ZM199.126 3.16057H183.146V4.16057H199.126V3.16057ZM182.646 3.66057V43.9268H183.646V3.66057H182.646ZM183.146 43.4268H179.341V44.4268H183.146V43.4268ZM179.841 43.9268V0H178.841V43.9268H179.841ZM185.168 30.0166V5.12479H184.168V30.0166H185.168ZM184.668 5.62479H199.126V4.62479H184.668V5.62479ZM199.126 5.62479C200.229 5.62479 201.252 5.83191 202.2 6.24254L202.597 5.32485C201.517 4.85694 200.358 4.62479 199.126 4.62479V5.62479ZM202.219 6.25033C203.173 6.61757 204.004 7.14336 204.716 7.82788L205.409 7.10723C204.598 6.32751 203.653 5.73073 202.578 5.31705L202.219 6.25033ZM204.716 7.82788C205.427 8.51231 205.971 9.30911 206.351 10.2219L207.274 9.83799C206.842 8.79848 206.219 7.88702 205.409 7.10723L204.716 7.82788ZM206.36 10.2418C206.784 11.1489 206.997 12.1255 206.997 13.178H207.997C207.997 11.9854 207.754 10.8633 207.265 9.8181L206.36 10.2418ZM206.997 13.178V21.9634H207.997V13.178H206.997ZM206.997 21.9634C206.997 23.0159 206.784 23.9926 206.36 24.8996L207.265 25.3233C207.754 24.2781 207.997 23.156 207.997 21.9634H206.997ZM206.351 24.9195C205.971 25.8323 205.427 26.6291 204.716 27.3135L205.409 28.0342C206.219 27.2544 206.842 26.3429 207.274 25.3034L206.351 24.9195ZM204.716 27.3135C204 28.0023 203.163 28.5554 202.2 28.9721L202.597 29.8898C203.664 29.4279 204.603 28.8097 205.409 28.0342L204.716 27.3135ZM202.219 28.9643C201.266 29.3311 200.236 29.5166 199.126 29.5166V30.5166C200.35 30.5166 201.502 30.3117 202.578 29.8976L202.219 28.9643ZM199.126 29.5166H184.668V30.5166H199.126V29.5166ZM188.473 26.8561H199.126V25.8561H188.473V26.8561ZM199.126 26.8561C200.515 26.8561 201.708 26.3969 202.669 25.4718L201.976 24.7512C201.213 25.4855 200.274 25.8561 199.126 25.8561V26.8561ZM202.669 25.4718C203.676 24.5031 204.192 23.3253 204.192 21.9634H203.192C203.192 23.0418 202.795 23.9628 201.976 24.7512L202.669 25.4718ZM204.192 21.9634V13.178H203.192V21.9634H204.192ZM204.192 13.178C204.192 11.8151 203.675 10.6564 202.659 9.7331L201.986 10.4732C202.797 11.2094 203.192 12.1006 203.192 13.178H204.192ZM202.679 9.75288C201.72 8.77538 200.524 8.28536 199.126 8.28536V9.28536C200.265 9.28536 201.2 9.67387 201.966 10.4534L202.679 9.75288ZM199.126 8.28536H188.473V9.28536H199.126V8.28536ZM187.973 8.78536V26.3561H188.973V8.78536H187.973ZM247.232 35.1414V38.802H248.232V35.1414H247.232ZM247.732 38.302H226.424V39.302H247.732V38.302ZM226.424 38.302C225.871 38.302 225.432 38.1416 225.075 37.8363L224.425 38.5963C224.981 39.072 225.658 39.302 226.424 39.302V38.302ZM225.117 37.877C224.802 37.5361 224.641 37.1228 224.641 36.6057H223.641C223.641 37.3575 223.886 38.018 224.383 38.5556L225.117 37.877ZM224.641 36.6057V0H223.641V36.6057H224.641ZM224.141 0.5H227.946V-0.5H224.141V0.5ZM227.446 0V35.1414H228.446V0H227.446ZM227.946 35.6414H247.732V34.6414H227.946V35.6414ZM218.814 0.5H222.619V-0.5H218.814V0.5ZM222.119 0V36.6057H223.119V0H222.119ZM222.119 36.6057C222.119 37.7599 222.524 38.7635 223.326 39.5894L224.043 38.8931C223.424 38.2548 223.119 37.5013 223.119 36.6057H222.119ZM223.35 39.6133C224.207 40.3827 225.241 40.7662 226.424 40.7662V39.7662C225.476 39.7662 224.684 39.4665 224.019 38.8692L223.35 39.6133ZM226.424 40.7662H247.732V39.7662H226.424V40.7662ZM247.232 40.2662V43.9268H248.232V40.2662H247.232ZM247.732 43.4268H226.424V44.4268H247.732V43.4268ZM226.424 43.4268C224.416 43.4268 222.741 42.7649 221.368 41.4433L220.674 42.164C222.243 43.6733 224.17 44.4268 226.424 44.4268V43.4268ZM221.368 41.4433C219.995 40.1226 219.314 38.5202 219.314 36.6057H218.314C218.314 38.7909 219.105 40.6539 220.674 42.164L221.368 41.4433ZM219.314 36.6057V0H218.314V36.6057H219.314ZM253.256 0.5H285.218V-0.5H253.256V0.5ZM284.718 0V3.66057H285.718V0H284.718ZM285.218 3.16057H257.061V4.16057H285.218V3.16057ZM256.561 3.66057V30.7487H257.561V3.66057H256.561ZM256.561 30.7487C256.561 32.1326 256.828 33.4451 257.364 34.6812L258.281 34.2838C257.802 33.1772 257.561 32.0005 257.561 30.7487H256.561ZM257.367 34.6884C257.898 35.8645 258.617 36.914 259.52 37.8345L260.234 37.1339C259.413 36.2973 258.761 35.3457 258.278 34.2766L257.367 34.6884ZM259.53 37.8445C260.492 38.7692 261.612 39.4871 262.887 39.9982L263.259 39.07C262.099 38.605 261.089 37.9562 260.224 37.1239L259.53 37.8445ZM262.887 39.9982C264.167 40.511 265.524 40.7662 266.954 40.7662V39.7662C265.645 39.7662 264.415 39.5333 263.259 39.07L262.887 39.9982ZM266.954 40.7662H285.218V39.7662H266.954V40.7662ZM284.718 40.2662V43.9268H285.718V40.2662H284.718ZM285.218 43.4268H266.954V44.4268H285.218V43.4268ZM266.954 43.4268C265.139 43.4268 263.428 43.0968 261.816 42.4389L261.438 43.3648C263.175 44.0735 265.015 44.4268 266.954 44.4268V43.4268ZM261.816 42.4389C260.195 41.7771 258.775 40.8814 257.553 39.7525L256.874 40.4871C258.189 41.701 259.711 42.6599 261.438 43.3648L261.816 42.4389ZM257.568 39.7666C256.394 38.591 255.465 37.2272 254.779 35.6718L253.864 36.0753C254.599 37.7411 255.598 39.2082 256.86 40.473L257.568 39.7666ZM254.779 35.6718C254.098 34.1264 253.756 32.487 253.756 30.7487H252.756C252.756 32.6223 253.125 34.3994 253.864 36.0753L254.779 35.6718ZM253.756 30.7487V0H252.756V30.7487H253.756ZM284.718 17.5707V21.2313H285.718V17.5707H284.718ZM285.218 20.7313H258.583V21.7313H285.218V20.7313ZM259.083 21.2313V5.12479H258.083V21.2313H259.083ZM258.583 5.62479H285.218V4.62479H258.583V5.62479ZM284.718 5.12479V8.78536H285.718V5.12479H284.718ZM285.218 8.28536H262.388V9.28536H285.218V8.28536ZM261.888 8.78536V17.5707H262.888V8.78536H261.888ZM262.388 18.0707H285.218V17.0707H262.388V18.0707ZM285.218 25.8561H262.388V26.8561H285.218V25.8561ZM261.888 26.3561V30.7487H262.888V26.3561H261.888ZM261.888 30.7487C261.888 32.1013 262.372 33.276 263.325 34.2471L264.039 33.5466C263.267 32.7606 262.888 31.8366 262.888 30.7487H261.888ZM263.335 34.2572C264.301 35.186 265.52 35.6414 266.954 35.6414V34.6414C265.75 34.6414 264.788 34.2671 264.029 33.5365L263.335 34.2572ZM266.954 35.6414H285.218V34.6414H266.954V35.6414ZM284.718 35.1414V38.802H285.718V35.1414H284.718ZM285.218 38.302H266.954V39.302H285.218V38.302ZM266.954 38.302C265.844 38.302 264.815 38.1165 263.862 37.7497L263.503 38.6829C264.579 39.097 265.731 39.302 266.954 39.302V38.302ZM263.881 37.7575C262.918 37.3408 262.081 36.7877 261.365 36.0989L260.672 36.8196C261.478 37.595 262.417 38.2133 263.483 38.6752L263.881 37.7575ZM261.365 36.0989C260.649 35.4102 260.076 34.6067 259.645 33.685L258.739 34.1087C259.221 35.1393 259.866 36.044 260.672 36.8196L261.365 36.0989ZM259.654 33.7049C259.275 32.7933 259.083 31.8096 259.083 30.7487H258.083C258.083 31.9331 258.298 33.0481 258.73 34.0888L259.654 33.7049ZM259.083 30.7487V22.6955H258.083V30.7487H259.083ZM258.583 23.1955H285.218V22.1955H258.583V23.1955ZM284.718 22.6955V26.3561H285.718V22.6955H284.718ZM305.876 11.5669L312.572 15.2274L313.052 14.3499L306.355 10.6894L305.876 11.5669ZM312.5 14.3978L309.38 16.887L310.004 17.6687L313.124 15.1795L312.5 14.3978ZM309.93 16.8383L304.527 13.9098L304.051 14.789L309.454 17.7175L309.93 16.8383ZM304.519 13.9054C303.279 13.2631 302.279 12.3477 301.514 11.1515L300.672 11.6904C301.53 13.0323 302.661 14.0691 304.059 14.7934L304.519 13.9054ZM301.522 11.1638C300.807 9.97165 300.451 8.69378 300.451 7.32113H299.451C299.451 8.87693 299.857 10.3323 300.664 11.6781L301.522 11.1638ZM300.451 7.32113V0.0732099H299.451V7.32113H300.451ZM299.951 0.57321H303.756V-0.42679H299.951V0.57321ZM303.256 0.0732099V7.32113H304.256V0.0732099H303.256ZM303.256 7.32113C303.256 8.23659 303.482 9.08197 303.935 9.84602L304.795 9.33534C304.437 8.73278 304.256 8.06513 304.256 7.32113H303.256ZM303.959 9.88273C304.461 10.5798 305.102 11.1413 305.875 11.5663L306.356 10.69C305.709 10.334 305.183 9.87052 304.771 9.29863L303.959 9.88273ZM323.023 15.6869C324.096 14.8021 324.95 14.0318 325.577 13.3778L324.856 12.6854C324.266 13.3004 323.445 14.0431 322.387 14.9154L323.023 15.6869ZM325.577 13.3778C326.209 12.7196 326.698 12.0712 327.03 11.4319L326.143 10.9707C325.866 11.5028 325.442 12.0747 324.856 12.6854L325.577 13.3778ZM327.03 11.4319C327.361 10.7951 327.56 10.1461 327.617 9.4874L326.621 9.40111C326.576 9.91378 326.42 10.4362 326.143 10.9707L327.03 11.4319ZM327.617 9.48411C327.669 8.83378 327.695 8.11249 327.695 7.32113H326.695C326.695 8.09161 326.67 8.78574 326.621 9.4044L327.617 9.48411ZM327.695 7.32113V0.0732099H326.695V7.32113H327.695ZM327.195 0.57321H331V-0.42679H327.195V0.57321ZM330.5 0.0732099V7.32113H331.5V0.0732099H330.5ZM330.5 7.32113C330.5 8.42981 330.45 9.38478 330.352 10.1889L331.344 10.3103C331.449 9.45493 331.5 8.4576 331.5 7.32113H330.5ZM330.352 10.1889C330.257 10.9579 330.022 11.7341 329.638 12.5191L330.536 12.9585C330.964 12.0839 331.235 11.2007 331.344 10.3103L330.352 10.1889ZM329.643 12.5082C329.265 13.2359 328.662 14.0532 327.818 14.9606L328.55 15.6417C329.431 14.6945 330.097 13.8035 330.53 12.9693L329.643 12.5082ZM327.817 14.9618C327.029 15.8143 325.91 16.8215 324.448 17.9849L325.071 18.7672C326.553 17.5878 327.716 16.5451 328.552 15.6405L327.817 14.9618ZM324.445 17.9873L305.801 33.0688L306.43 33.8463L325.074 18.7648L324.445 17.9873ZM305.803 33.0675C305.185 33.5627 304.704 33.9976 304.372 34.3695L305.119 35.0348C305.396 34.7234 305.828 34.3286 306.428 33.8477L305.803 33.0675ZM304.399 34.3418C304.077 34.6512 303.818 34.9517 303.637 35.2429L304.485 35.7721C304.608 35.5752 304.805 35.3388 305.092 35.0625L304.399 34.3418ZM303.637 35.2429C303.449 35.5435 303.325 35.8732 303.264 36.2275L304.249 36.3982C304.289 36.1668 304.368 35.9595 304.485 35.7721L303.637 35.2429ZM303.256 36.3128C303.256 36.3133 303.256 36.3138 303.256 36.3142C303.256 36.3147 303.256 36.3152 303.256 36.3157C303.256 36.3162 303.256 36.3166 303.256 36.3171C303.256 36.3176 303.256 36.3181 303.256 36.3185C303.256 36.319 303.256 36.3195 303.256 36.32C303.256 36.3205 303.256 36.3209 303.256 36.3214C303.256 36.3219 303.256 36.3224 303.256 36.3229C303.256 36.3233 303.256 36.3238 303.256 36.3243C303.256 36.3248 303.256 36.3253 303.256 36.3257C303.256 36.3262 303.256 36.3267 303.256 36.3272C303.256 36.3277 303.256 36.3282 303.256 36.3286C303.256 36.3291 303.256 36.3296 303.256 36.3301C303.256 36.3306 303.256 36.3311 303.256 36.3315C303.256 36.332 303.256 36.3325 303.256 36.333C303.256 36.3335 303.256 36.334 303.256 36.3344C303.256 36.3349 303.256 36.3354 303.256 36.3359C303.256 36.3364 303.256 36.3369 303.256 36.3374C303.256 36.3378 303.256 36.3383 303.256 36.3388C303.256 36.3393 303.256 36.3398 303.256 36.3403C303.256 36.3408 303.256 36.3413 303.256 36.3417C303.256 36.3422 303.256 36.3427 303.256 36.3432C303.256 36.3437 303.256 36.3442 303.256 36.3447C303.256 36.3452 303.256 36.3456 303.256 36.3461C303.256 36.3466 303.256 36.3471 303.256 36.3476C303.256 36.3481 303.256 36.3486 303.256 36.3491C303.256 36.3496 303.256 36.3501 303.256 36.3506C303.256 36.351 303.256 36.3515 303.256 36.352C303.256 36.3525 303.256 36.353 303.256 36.3535C303.256 36.354 303.256 36.3545 303.256 36.355C303.256 36.3555 303.256 36.356 303.256 36.3565C303.256 36.357 303.256 36.3574 303.256 36.3579C303.256 36.3584 303.256 36.3589 303.256 36.3594C303.256 36.3599 303.256 36.3604 303.256 36.3609C303.256 36.3614 303.256 36.3619 303.256 36.3624C303.256 36.3629 303.256 36.3634 303.256 36.3639C303.256 36.3644 303.256 36.3649 303.256 36.3654C303.256 36.3659 303.256 36.3664 303.256 36.3669C303.256 36.3674 303.256 36.3679 303.256 36.3684C303.256 36.3689 303.256 36.3694 303.256 36.3699C303.256 36.3703 303.256 36.3708 303.256 36.3713C303.256 36.3718 303.256 36.3723 303.256 36.3728C303.256 36.3733 303.256 36.3738 303.256 36.3743C303.256 36.3748 303.256 36.3753 303.256 36.3758C303.256 36.3763 303.256 36.3768 303.256 36.3773C303.256 36.3778 303.256 36.3783 303.256 36.3789C303.256 36.3794 303.256 36.3799 303.256 36.3804C303.256 36.3809 303.256 36.3814 303.256 36.3819C303.256 36.3824 303.256 36.3829 303.256 36.3834C303.256 36.3839 303.256 36.3844 303.256 36.3849C303.256 36.3854 303.256 36.3859 303.256 36.3864C303.256 36.3869 303.256 36.3874 303.256 36.3879C303.256 36.3884 303.256 36.3889 303.256 36.3894C303.256 36.3899 303.256 36.3904 303.256 36.3909C303.256 36.3915 303.256 36.392 303.256 36.3925C303.256 36.393 303.256 36.3935 303.256 36.394C303.256 36.3945 303.256 36.395 303.256 36.3955C303.256 36.396 303.256 36.3965 303.256 36.397C303.256 36.3975 303.256 36.3981 303.256 36.3986C303.256 36.3991 303.256 36.3996 303.256 36.4001C303.256 36.4006 303.256 36.4011 303.256 36.4016C303.256 36.4021 303.256 36.4026 303.256 36.4032C303.256 36.4037 303.256 36.4042 303.256 36.4047C303.256 36.4052 303.256 36.4057 303.256 36.4062C303.256 36.4067 303.256 36.4072 303.256 36.4078C303.256 36.4083 303.256 36.4088 303.256 36.4093C303.256 36.4098 303.256 36.4103 303.256 36.4108C303.256 36.4113 303.256 36.4119 303.256 36.4124C303.256 36.4129 303.256 36.4134 303.256 36.4139C303.256 36.4144 303.256 36.4149 303.256 36.4155C303.256 36.416 303.256 36.4165 303.256 36.417C303.256 36.4175 303.256 36.418 303.256 36.4186C303.256 36.4191 303.256 36.4196 303.256 36.4201C303.256 36.4206 303.256 36.4211 303.256 36.4217C303.256 36.4222 303.256 36.4227 303.256 36.4232C303.256 36.4237 303.256 36.4242 303.256 36.4248C303.256 36.4253 303.256 36.4258 303.256 36.4263C303.256 36.4268 303.256 36.4274 303.256 36.4279C303.256 36.4284 303.256 36.4289 303.256 36.4294C303.256 36.43 303.256 36.4305 303.256 36.431C303.256 36.4315 303.256 36.432 303.256 36.4326C303.256 36.4331 303.256 36.4336 303.256 36.4341C303.256 36.4347 303.256 36.4352 303.256 36.4357C303.256 36.4362 303.256 36.4367 303.256 36.4373C303.256 36.4378 303.256 36.4383 303.256 36.4388C303.256 36.4394 303.256 36.4399 303.256 36.4404C303.256 36.4409 303.256 36.4415 303.256 36.442C303.256 36.4425 303.256 36.443 303.256 36.4436C303.256 36.4441 303.256 36.4446 303.256 36.4451C303.256 36.4457 303.256 36.4462 303.256 36.4467C303.256 36.4472 303.256 36.4478 303.256 36.4483C303.256 36.4488 303.256 36.4493 303.256 36.4499C303.256 36.4504 303.256 36.4509 303.256 36.4515C303.256 36.452 303.256 36.4525 303.256 36.453C303.256 36.4536 303.256 36.4541 303.256 36.4546C303.256 36.4552 303.256 36.4557 303.256 36.4562C303.256 36.4567 303.256 36.4573 303.256 36.4578C303.256 36.4583 303.256 36.4589 303.256 36.4594C303.256 36.4599 303.256 36.4605 303.256 36.461C303.256 36.4615 303.256 36.4621 303.256 36.4626C303.256 36.4631 303.256 36.4636 303.256 36.4642C303.256 36.4647 303.256 36.4652 303.256 36.4658C303.256 36.4663 303.256 36.4668 303.256 36.4674C303.256 36.4679 303.256 36.4684 303.256 36.469C303.256 36.4695 303.256 36.47 303.256 36.4706C303.256 36.4711 303.256 36.4717 303.256 36.4722C303.256 36.4727 303.256 36.4733 303.256 36.4738C303.256 36.4743 303.256 36.4749 303.256 36.4754C303.256 36.4759 303.256 36.4765 303.256 36.477C303.256 36.4776 303.256 36.4781 303.256 36.4786C303.256 36.4792 303.256 36.4797 303.256 36.4802C303.256 36.4808 303.256 36.4813 303.256 36.4819C303.256 36.4824 303.256 36.4829 303.256 36.4835C303.256 36.484 303.256 36.4845 303.256 36.4851C303.256 36.4856 303.256 36.4862 303.256 36.4867C303.256 36.4872 303.256 36.4878 303.256 36.4883C303.256 36.4889 303.256 36.4894 303.256 36.49C303.256 36.4905 303.256 36.491 303.256 36.4916C303.256 36.4921 303.256 36.4927 303.256 36.4932C303.256 36.4937 303.256 36.4943 303.256 36.4948C303.256 36.4954 303.256 36.4959 303.256 36.4965C303.256 36.497 303.256 36.4976 303.256 36.4981C303.256 36.4986 303.256 36.4992 303.256 36.4997C303.256 36.5003 303.256 36.5008 303.256 36.5014C303.256 36.5019 303.256 36.5025 303.256 36.503C303.256 36.5035 303.256 36.5041 303.256 36.5046C303.256 36.5052 303.256 36.5057 303.256 36.5063C303.256 36.5068 303.256 36.5074 303.256 36.5079C303.256 36.5085 303.256 36.509 303.256 36.5096C303.256 36.5101 303.256 36.5107 303.256 36.5112C303.256 36.5118 303.256 36.5123 303.256 36.5129C303.256 36.5134 303.256 36.514 303.256 36.5145C303.256 36.5151 303.256 36.5156 303.256 36.5162C303.256 36.5167 303.256 36.5173 303.256 36.5178C303.256 36.5184 303.256 36.5189 303.256 36.5195C303.256 36.52 303.256 36.5206 303.256 36.5211C303.256 36.5217 303.256 36.5222 303.256 36.5228C303.256 36.5233 303.256 36.5239 303.256 36.5244C303.256 36.525 303.256 36.5255 303.256 36.5261C303.256 36.5266 303.256 36.5272 303.256 36.5278C303.256 36.5283 303.256 36.5289 303.256 36.5294C303.256 36.53 303.256 36.5305 303.256 36.5311C303.256 36.5316 303.256 36.5322 303.256 36.5327C303.256 36.5333 303.256 36.5339 303.256 36.5344C303.256 36.535 303.256 36.5355 303.256 36.5361C303.256 36.5366 303.256 36.5372 303.256 36.5378C303.256 36.5383 303.256 36.5389 303.256 36.5394C303.256 36.54 303.256 36.5406 303.256 36.5411C303.256 36.5417 303.256 36.5422 303.256 36.5428C303.256 36.5433 303.256 36.5439 303.256 36.5445C303.256 36.545 303.256 36.5456 303.256 36.5461C303.256 36.5467 303.256 36.5473 303.256 36.5478C303.256 36.5484 303.256 36.549 303.256 36.5495C303.256 36.5501 303.256 36.5506 303.256 36.5512C303.256 36.5518 303.256 36.5523 303.256 36.5529C303.256 36.5534 303.256 36.554 303.256 36.5546C303.256 36.5551 303.256 36.5557 303.256 36.5563C303.256 36.5568 303.256 36.5574 303.256 36.558C303.256 36.5585 303.256 36.5591 303.256 36.5597C303.256 36.5602 303.256 36.5608 303.256 36.5613C303.256 36.5619 303.256 36.5625 303.256 36.563C303.256 36.5636 303.256 36.5642 303.256 36.5647C303.256 36.5653 303.256 36.5659 303.256 36.5664C303.256 36.567 303.256 36.5676 303.256 36.5681C303.256 36.5687 303.256 36.5693 303.256 36.5698C303.256 36.5704 303.256 36.571 303.256 36.5716C303.256 36.5721 303.256 36.5727 303.256 36.5733C303.256 36.5738 303.256 36.5744 303.256 36.575C303.256 36.5755 303.256 36.5761 303.256 36.5767C303.256 36.5773 303.256 36.5778 303.256 36.5784C303.256 36.579 303.256 36.5795 303.256 36.5801C303.256 36.5807 303.256 36.5812 303.256 36.5818C303.256 36.5824 303.256 36.583 303.256 36.5835C303.256 36.5841 303.256 36.5847 303.256 36.5853C303.256 36.5858 303.256 36.5864 303.256 36.587C303.256 36.5876 303.256 36.5881 303.256 36.5887C303.256 36.5893 303.256 36.5899 303.256 36.5904C303.256 36.591 303.256 36.5916 303.256 36.5922C303.256 36.5927 303.256 36.5933 303.256 36.5939C303.256 36.5945 303.256 36.595 303.256 36.5956C303.256 36.5962 303.256 36.5968 303.256 36.5973C303.256 36.5979 303.256 36.5985 303.256 36.5991C303.256 36.5996 303.256 36.6002 303.256 36.6008C303.256 36.6014 303.256 36.602 303.256 36.6025C303.256 36.6031 303.256 36.6037 303.256 36.6043C303.256 36.6049 303.256 36.6054 303.256 36.606C303.256 36.6066 303.256 36.6072 303.256 36.6078C303.256 36.6083 303.256 36.6089 303.256 36.6095C303.256 36.6101 303.256 36.6107 303.256 36.6112C303.256 36.6118 303.256 36.6124 303.256 36.613C303.256 36.6136 303.256 36.6142 303.256 36.6147C303.256 36.6153 303.256 36.6159 303.256 36.6165C303.256 36.6171 303.256 36.6177 303.256 36.6182C303.256 36.6188 303.256 36.6194 303.256 36.62C303.256 36.6206 303.256 36.6212 303.256 36.6217C303.256 36.6223 303.256 36.6229 303.256 36.6235C303.256 36.6241 303.256 36.6247 303.256 36.6253C303.256 36.6258 303.256 36.6264 303.256 36.627C303.256 36.6276 303.256 36.6282 303.256 36.6288C303.256 36.6294 303.256 36.63 303.256 36.6305C303.256 36.6311 303.256 36.6317 303.256 36.6323C303.256 36.6329 303.256 36.6335 303.256 36.6341C303.256 36.6347 303.256 36.6352 303.256 36.6358C303.256 36.6364 303.256 36.637 303.256 36.6376C303.256 36.6382 303.256 36.6388 303.256 36.6394C303.256 36.64 303.256 36.6406 303.256 36.6412C303.256 36.6417 303.256 36.6423 303.256 36.6429C303.256 36.6435 303.256 36.6441 303.256 36.6447C303.256 36.6453 303.256 36.6459 303.256 36.6465C303.256 36.6471 303.256 36.6477 303.256 36.6483C303.256 36.6488 303.256 36.6494 303.256 36.65C303.256 36.6506 303.256 36.6512 303.256 36.6518C303.256 36.6524 303.256 36.653 303.256 36.6536C303.256 36.6542 303.256 36.6548 303.256 36.6554C303.256 36.656 303.256 36.6566 303.256 36.6572C303.256 36.6578 303.256 36.6584 303.256 36.659C303.256 36.6596 303.256 36.6602 303.256 36.6608C303.256 36.6614 303.256 36.662 303.256 36.6626C303.256 36.6632 303.256 36.6637 303.256 36.6643C303.256 36.6649 303.256 36.6655 303.256 36.6661C303.256 36.6667 303.256 36.6673 303.256 36.6679C303.256 36.6685 303.256 36.6691 303.256 36.6697C303.256 36.6703 303.256 36.6709 303.256 36.6715C303.256 36.6721 303.256 36.6727 303.256 36.6733C303.256 36.6739 303.256 36.6745 303.256 36.6751C303.256 36.6758 303.256 36.6763 303.256 36.677C303.256 36.6776 303.256 36.6782 303.256 36.6788C303.256 36.6794 303.256 36.68 303.256 36.6806C303.256 36.6812 303.256 36.6818 303.256 36.6824C303.256 36.683 303.256 36.6836 303.256 36.6842C303.256 36.6848 303.256 36.6854 303.256 36.686C303.256 36.6866 303.256 36.6872 303.256 36.6878C303.256 36.6884 303.256 36.689 303.256 36.6896C303.256 36.6903 303.256 36.6909 303.256 36.6915C303.256 36.6921 303.256 36.6927 303.256 36.6933C303.256 36.6939 303.256 36.6945 303.256 36.6951C303.256 36.6957 303.256 36.6963 303.256 36.6969C303.256 36.6975 303.256 36.6981 303.256 36.6988C303.256 36.6994 303.256 36.7 303.256 36.7006C303.256 36.7012 303.256 36.7018 303.256 36.7024C303.256 36.703 303.256 36.7036 303.256 36.7042C303.256 36.7049 303.256 36.7055 303.256 36.7061C303.256 36.7067 303.256 36.7073 303.256 36.7079C303.256 36.7085 303.256 36.7091 303.256 36.7098C303.256 36.7104 303.256 36.711 303.256 36.7116C303.256 36.7122 303.256 36.7128 303.256 36.7134C303.256 36.714 303.256 36.7147 303.256 36.7153C303.256 36.7159 303.256 36.7165 303.256 36.7171C303.256 36.7177 303.256 36.7183 303.256 36.719C303.256 36.7196 303.256 36.7202 303.256 36.7208C303.256 36.7214 303.256 36.722 303.256 36.7226C303.256 36.7233 303.256 36.7239 303.256 36.7245C303.256 36.7251 303.256 36.7257 303.256 36.7264C303.256 36.727 303.256 36.7276 303.256 36.7282C303.256 36.7288 303.256 36.7294 303.256 36.7301C303.256 36.7307 303.256 36.7313 303.256 36.7319C303.256 36.7325 303.256 36.7332 303.256 36.7338C303.256 36.7344 303.256 36.735 303.256 36.7356C303.256 36.7363 303.256 36.7369 303.256 36.7375C303.256 36.7381 303.256 36.7387 303.256 36.7394C303.256 36.74 303.256 36.7406 303.256 36.7412C303.256 36.7418 303.256 36.7425 303.256 36.7431C303.256 36.7437 303.256 36.7443 303.256 36.745C303.256 36.7456 303.256 36.7462 303.256 36.7468C303.256 36.7475 303.256 36.7481 303.256 36.7487C303.256 36.7493 303.256 36.7499 303.256 36.7506C303.256 36.7512 303.256 36.7518 303.256 36.7524C303.256 36.7531 303.256 36.7537 303.256 36.7543C303.256 36.7549 303.256 36.7556 303.256 36.7562C303.256 36.7568 303.256 36.7575 303.256 36.7581C303.256 36.7587 303.256 36.7593 303.256 36.76C303.256 36.7606 303.256 36.7612 303.256 36.7618C303.256 36.7625 303.256 36.7631 303.256 36.7637C303.256 36.7644 303.256 36.765 303.256 36.7656C303.256 36.7662 303.256 36.7669 303.256 36.7675C303.256 36.7681 303.256 36.7688 303.256 36.7694C303.256 36.77 303.256 36.7707 303.256 36.7713C303.256 36.7719 303.256 36.7725 303.256 36.7732C303.256 36.7738 303.256 36.7744 303.256 36.7751C303.256 36.7757 303.256 36.7763 303.256 36.777C303.256 36.7776 303.256 36.7782 303.256 36.7789C303.256 36.7795 303.256 36.7801 303.256 36.7808C303.256 36.7814 303.256 36.782 303.256 36.7827C303.256 36.7833 303.256 36.7839 303.256 36.7846C303.256 36.7852 303.256 36.7858 303.256 36.7865C303.256 36.7871 303.256 36.7878 303.256 36.7884C303.256 36.789 303.256 36.7897 303.256 36.7903C303.256 36.7909 303.256 36.7916 303.256 36.7922C303.256 36.7928 303.256 36.7935 303.256 36.7941C303.256 36.7948 303.256 36.7954 303.256 36.796C303.256 36.7967 303.256 36.7973 303.256 36.7979C303.256 36.7986 303.256 36.7992 303.256 36.7999C303.256 36.8005 303.256 36.8011 303.256 36.8018C303.256 36.8024 303.256 36.8031 303.256 36.8037C303.256 36.8043 303.256 36.805 303.256 36.8056C303.256 36.8063 303.256 36.8069 303.256 36.8075C303.256 36.8082 303.256 36.8088 303.256 36.8095C303.256 36.8101 303.256 36.8108 303.256 36.8114C303.256 36.812 303.256 36.8127 303.256 36.8133C303.256 36.814 303.256 36.8146 303.256 36.8153C303.256 36.8159 303.256 36.8165 303.256 36.8172C303.256 36.8178 303.256 36.8185 303.256 36.8191C303.256 36.8198 303.256 36.8204 303.256 36.8211C303.256 36.8217 303.256 36.8223 303.256 36.823C303.256 36.8236 303.256 36.8243 303.256 36.8249C303.256 36.8256 303.256 36.8262 303.256 36.8269C303.256 36.8275 303.256 36.8282 303.256 36.8288C303.256 36.8295 303.256 36.8301 303.256 36.8308C303.256 36.8314 303.256 36.8321 303.256 36.8327C303.256 36.8333 303.256 36.834 303.256 36.8346C303.256 36.8353 303.256 36.8359 303.256 36.8366C303.256 36.8372 303.256 36.8379 303.256 36.8385C303.256 36.8392 303.256 36.8398 303.256 36.8405C303.256 36.8411 303.256 36.8418 303.256 36.8425C303.256 36.8431 303.256 36.8438 303.256 36.8444C303.256 36.8451 303.256 36.8457 303.256 36.8464C303.256 36.847 303.256 36.8477 303.256 36.8483C303.256 36.849 303.256 36.8496 303.256 36.8503C303.256 36.8509 303.256 36.8516 303.256 36.8522C303.256 36.8529 303.256 36.8536 303.256 36.8542C303.256 36.8549 303.256 36.8555 303.256 36.8562C303.256 36.8568 303.256 36.8575 303.256 36.8581C303.256 36.8588 303.256 36.8595 303.256 36.8601C303.256 36.8608 303.256 36.8614 303.256 36.8621C303.256 36.8627 303.256 36.8634 303.256 36.8641C303.256 36.8647 303.256 36.8654 303.256 36.866C303.256 36.8667 303.256 36.8673 303.256 36.868C303.256 36.8687 303.256 36.8693 303.256 36.87C303.256 36.8706 303.256 36.8713 303.256 36.872C303.256 36.8726 303.256 36.8733 303.256 36.8739C303.256 36.8746 303.256 36.8753 303.256 36.8759C303.256 36.8766 303.256 36.8772 303.256 36.8779C303.256 36.8786 303.256 36.8792 303.256 36.8799C303.256 36.8806 303.256 36.8812 303.256 36.8819C303.256 36.8825 303.256 36.8832 303.256 36.8839C303.256 36.8845 303.256 36.8852 303.256 36.8859C303.256 36.8865 303.256 36.8872 303.256 36.8878C303.256 36.8885 303.256 36.8892 303.256 36.8898C303.256 36.8905 303.256 36.8912 303.256 36.8918C303.256 36.8925 303.256 36.8932 303.256 36.8938C303.256 36.8945 303.256 36.8952 303.256 36.8958C303.256 36.8965 303.256 36.8972 303.256 36.8978C303.256 36.8985 303.256 36.8992 303.256 36.8998C303.256 36.9005 303.256 36.9012 303.256 36.9018C303.256 36.9025 303.256 36.9032 303.256 36.9038C303.256 36.9045 303.256 36.9052 303.256 36.9058C303.256 36.9065 303.256 36.9072 303.256 36.9079C303.256 36.9085 303.256 36.9092 303.256 36.9099C303.256 36.9105 303.256 36.9112 303.256 36.9119C303.256 36.9126 303.256 36.9132 303.256 36.9139C303.256 36.9146 303.256 36.9152 303.256 36.9159C303.256 36.9166 303.256 36.9173 303.256 36.9179C303.256 36.9186 303.256 36.9193 303.256 36.9199C303.256 36.9206 303.256 36.9213 303.256 36.922C303.256 36.9226 303.256 36.9233 303.256 36.924C303.256 36.9247 303.256 36.9253 303.256 36.926C303.256 36.9267 303.256 36.9274 303.256 36.928C303.256 36.9287 303.256 36.9294 303.256 36.9301C303.256 36.9307 303.256 36.9314 303.256 36.9321C303.256 36.9328 303.256 36.9334 303.256 36.9341C303.256 36.9348 303.256 36.9355 303.256 36.9362C303.256 36.9368 303.256 36.9375 303.256 36.9382C303.256 36.9389 303.256 36.9395 303.256 36.9402C303.256 36.9409 303.256 36.9416 303.256 36.9423C303.256 36.9429 303.256 36.9436 303.256 36.9443C303.256 36.945 303.256 36.9457 303.256 36.9463C303.256 36.947 303.256 36.9477 303.256 36.9484C303.256 36.9491 303.256 36.9497 303.256 36.9504C303.256 36.9511 303.256 36.9518 303.256 36.9525C303.256 36.9532 303.256 36.9538 303.256 36.9545C303.256 36.9552 303.256 36.9559 303.256 36.9566C303.256 36.9573 303.256 36.9579 303.256 36.9586C303.256 36.9593 303.256 36.96 303.256 36.9607C303.256 36.9614 303.256 36.962 303.256 36.9627C303.256 36.9634 303.256 36.9641 303.256 36.9648C303.256 36.9655 303.256 36.9662 303.256 36.9668C303.256 36.9675 303.256 36.9682 303.256 36.9689C303.256 36.9696 303.256 36.9703 303.256 36.971C303.256 36.9717 303.256 36.9723 303.256 36.973C303.256 36.9737 303.256 36.9744 303.256 36.9751C303.256 36.9758 303.256 36.9765 303.256 36.9772C303.256 36.9778 303.256 36.9785 303.256 36.9792C303.256 36.9799 303.256 36.9806 303.256 36.9813C303.256 36.982 303.256 36.9827 303.256 36.9834C303.256 36.9841 303.256 36.9847 303.256 36.9854C303.256 36.9861 303.256 36.9868 303.256 36.9875C303.256 36.9882 303.256 36.9889 303.256 36.9896C303.256 36.9903 303.256 36.991 303.256 36.9917C303.256 36.9924 303.256 36.993 303.256 36.9937C303.256 36.9944 303.256 36.9951 303.256 36.9958C303.256 36.9965 303.256 36.9972 303.256 36.9979C303.256 36.9986 303.256 36.9993 303.256 37C303.256 37.0007 303.256 37.0014 303.256 37.0021C303.256 37.0028 303.256 37.0035 303.256 37.0042C303.256 37.0049 303.256 37.0056 303.256 37.0063C303.256 37.007 303.256 37.0076 303.256 37.0083C303.256 37.009 303.256 37.0097 303.256 37.0104C303.256 37.0111 303.256 37.0118 303.256 37.0125C303.256 37.0132 303.256 37.0139 303.256 37.0146C303.256 37.0153 303.256 37.016 303.256 37.0167C303.256 37.0174 303.256 37.0181 303.256 37.0188C303.256 37.0195 303.256 37.0202 303.256 37.0209C303.256 37.0216 303.256 37.0223 303.256 37.023C303.256 37.0237 303.256 37.0244 303.256 37.0251C303.256 37.0258 303.256 37.0265 303.256 37.0272C303.256 37.0279 303.256 37.0286 303.256 37.0293C303.256 37.03 303.256 37.0308 303.256 37.0315C303.256 37.0322 303.256 37.0329 303.256 37.0336C303.256 37.0343 303.256 37.035 303.256 37.0357C303.256 37.0364 303.256 37.0371 303.256 37.0378C303.256 37.0385 303.256 37.0392 303.256 37.0399C303.256 37.0406 303.256 37.0413 303.256 37.042C303.256 37.0427 303.256 37.0434 303.256 37.0441C303.256 37.0449 303.256 37.0456 303.256 37.0463C303.256 37.047 303.256 37.0477 303.256 37.0484C303.256 37.0491 303.256 37.0498 303.256 37.0505C303.256 37.0512 303.256 37.0519 303.256 37.0526C303.256 37.0534 303.256 37.0541 303.256 37.0548C303.256 37.0555 303.256 37.0562 303.256 37.0569C303.256 37.0576 303.256 37.0583 303.256 37.059C303.256 37.0597 303.256 37.0605 303.256 37.0612C303.256 37.0619 303.256 37.0626 303.256 37.0633C303.256 37.064 303.256 37.0647 303.256 37.0654C303.256 37.0661 303.256 37.0669 303.256 37.0676C303.256 37.0683 303.256 37.069 303.256 37.0697C303.256 37.0704 303.256 37.0711 303.256 37.0719C303.256 37.0726 303.256 37.0733 303.256 37.074C303.256 37.0747 303.256 37.0754 303.256 37.0761C303.256 37.0769 303.256 37.0776 303.256 37.0783C303.256 37.079 303.256 37.0797 303.256 37.0804C303.256 37.0812 303.256 37.0819 303.256 37.0826C303.256 37.0833 303.256 37.084 303.256 37.0847C303.256 37.0855 303.256 37.0862 303.256 37.0869C303.256 37.0876 303.256 37.0883 303.256 37.089C303.256 37.0898 303.256 37.0905 303.256 37.0912C303.256 37.0919 303.256 37.0926 303.256 37.0934C303.256 37.0941 303.256 37.0948 303.256 37.0955C303.256 37.0962 303.256 37.097 303.256 37.0977C303.256 37.0984 303.256 37.0991 303.256 37.0998C303.256 37.1006 303.256 37.1013 303.256 37.102C303.256 37.1027 303.256 37.1035 303.256 37.1042C303.256 37.1049 303.256 37.1056 303.256 37.1063C303.256 37.1071 303.256 37.1078 303.256 37.1085C303.256 37.1092 303.256 37.11 303.256 37.1107C303.256 37.1114 303.256 37.1121 303.256 37.1129C303.256 37.1136 303.256 37.1143 303.256 37.115C303.256 37.1158 303.256 37.1165 303.256 37.1172C303.256 37.1179 303.256 37.1187 303.256 37.1194C303.256 37.1201 303.256 37.1208 303.256 37.1216C303.256 37.1223 303.256 37.123 303.256 37.1237C303.256 37.1245 303.256 37.1252 303.256 37.1259C303.256 37.1267 303.256 37.1274 303.256 37.1281C303.256 37.1288 303.256 37.1296 303.256 37.1303C303.256 37.131 303.256 37.1318 303.256 37.1325C303.256 37.1332 303.256 37.1339 303.256 37.1347C303.256 37.1354 303.256 37.1361 303.256 37.1369C303.256 37.1376 303.256 37.1383 303.256 37.1391C303.256 37.1398 303.256 37.1405 303.256 37.1413C303.256 37.142 303.256 37.1427 303.256 37.1435C303.256 37.1442 303.256 37.1449 303.256 37.1457C303.256 37.1464 303.256 37.1471 303.256 37.1479C303.256 37.1486 303.256 37.1493 303.256 37.1501C303.256 37.1508 303.256 37.1515 303.256 37.1523C303.256 37.153 303.256 37.1537 303.256 37.1545C303.256 37.1552 303.256 37.1559 303.256 37.1567C303.256 37.1574 303.256 37.1581 303.256 37.1589C303.256 37.1596 303.256 37.1604 303.256 37.1611C303.256 37.1618 303.256 37.1626 303.256 37.1633C303.256 37.164 303.256 37.1648 303.256 37.1655C303.256 37.1662 303.256 37.167 303.256 37.1677C303.256 37.1685 303.256 37.1692 303.256 37.1699C303.256 37.1707 303.256 37.1714 303.256 37.1722C303.256 37.1729 303.256 37.1736 303.256 37.1744C303.256 37.1751 303.256 37.1759 303.256 37.1766C303.256 37.1773 303.256 37.1781 303.256 37.1788C303.256 37.1796 303.256 37.1803 303.256 37.181C303.256 37.1818 303.256 37.1825 303.256 37.1833C303.256 37.184 303.256 37.1848 303.256 37.1855C303.256 37.1862 303.256 37.187 303.256 37.1877C303.256 37.1885 303.256 37.1892 303.256 37.19C303.256 37.1907 303.256 37.1915 303.256 37.1922C303.256 37.1929 303.256 37.1937 303.256 37.1944C303.256 37.1952 303.256 37.1959 303.256 37.1967C303.256 37.1974 303.256 37.1982 303.256 37.1989C303.256 37.1997 303.256 37.2004 303.256 37.2012C303.256 37.2019 303.256 37.2026 303.256 37.2034C303.256 37.2041 303.256 37.2049 303.256 37.2056C303.256 37.2064 303.256 37.2071 303.256 37.2079C303.256 37.2086 303.256 37.2094 303.256 37.2101C303.256 37.2109 303.256 37.2116 303.256 37.2124C303.256 37.2131 303.256 37.2139 303.256 37.2146C303.256 37.2154 303.256 37.2161 303.256 37.2169C303.256 37.2176 303.256 37.2184 303.256 37.2191C303.256 37.2199 303.256 37.2206 303.256 37.2214C303.256 37.2221 303.256 37.2229 303.256 37.2236C303.256 37.2244 303.256 37.2252 303.256 37.2259C303.256 37.2267 303.256 37.2274 303.256 37.2282C303.256 37.2289 303.256 37.2297 303.256 37.2304C303.256 37.2312 303.256 37.2319 303.256 37.2327C303.256 37.2334 303.256 37.2342 303.256 37.235C303.256 37.2357 303.256 37.2365 303.256 37.2372C303.256 37.238 303.256 37.2387 303.256 37.2395C303.256 37.2402 303.256 37.241 303.256 37.2418C303.256 37.2425 303.256 37.2433 303.256 37.244C303.256 37.2448 303.256 37.2455 303.256 37.2463C303.256 37.2471 303.256 37.2478 303.256 37.2486C303.256 37.2493 303.256 37.2501 303.256 37.2509C303.256 37.2516 303.256 37.2524 303.256 37.2531C303.256 37.2539 303.256 37.2547 303.256 37.2554C303.256 37.2562 303.256 37.2569 303.256 37.2577C303.256 37.2585 303.256 37.2592 303.256 37.26C303.256 37.2607 303.256 37.2615 303.256 37.2623C303.256 37.263 303.256 37.2638 303.256 37.2646H304.256C304.256 37.2638 304.256 37.263 304.256 37.2623C304.256 37.2615 304.256 37.2607 304.256 37.26C304.256 37.2592 304.256 37.2585 304.256 37.2577C304.256 37.2569 304.256 37.2562 304.256 37.2554C304.256 37.2547 304.256 37.2539 304.256 37.2531C304.256 37.2524 304.256 37.2516 304.256 37.2509C304.256 37.2501 304.256 37.2493 304.256 37.2486C304.256 37.2478 304.256 37.2471 304.256 37.2463C304.256 37.2455 304.256 37.2448 304.256 37.244C304.256 37.2433 304.256 37.2425 304.256 37.2418C304.256 37.241 304.256 37.2402 304.256 37.2395C304.256 37.2387 304.256 37.238 304.256 37.2372C304.256 37.2365 304.256 37.2357 304.256 37.235C304.256 37.2342 304.256 37.2334 304.256 37.2327C304.256 37.2319 304.256 37.2312 304.256 37.2304C304.256 37.2297 304.256 37.2289 304.256 37.2282C304.256 37.2274 304.256 37.2267 304.256 37.2259C304.256 37.2252 304.256 37.2244 304.256 37.2236C304.256 37.2229 304.256 37.2221 304.256 37.2214C304.256 37.2206 304.256 37.2199 304.256 37.2191C304.256 37.2184 304.256 37.2176 304.256 37.2169C304.256 37.2161 304.256 37.2154 304.256 37.2146C304.256 37.2139 304.256 37.2131 304.256 37.2124C304.256 37.2116 304.256 37.2109 304.256 37.2101C304.256 37.2094 304.256 37.2086 304.256 37.2079C304.256 37.2071 304.256 37.2064 304.256 37.2056C304.256 37.2049 304.256 37.2041 304.256 37.2034C304.256 37.2026 304.256 37.2019 304.256 37.2012C304.256 37.2004 304.256 37.1997 304.256 37.1989C304.256 37.1982 304.256 37.1974 304.256 37.1967C304.256 37.1959 304.256 37.1952 304.256 37.1944C304.256 37.1937 304.256 37.1929 304.256 37.1922C304.256 37.1915 304.256 37.1907 304.256 37.19C304.256 37.1892 304.256 37.1885 304.256 37.1877C304.256 37.187 304.256 37.1862 304.256 37.1855C304.256 37.1848 304.256 37.184 304.256 37.1833C304.256 37.1825 304.256 37.1818 304.256 37.181C304.256 37.1803 304.256 37.1796 304.256 37.1788C304.256 37.1781 304.256 37.1773 304.256 37.1766C304.256 37.1759 304.256 37.1751 304.256 37.1744C304.256 37.1736 304.256 37.1729 304.256 37.1722C304.256 37.1714 304.256 37.1707 304.256 37.1699C304.256 37.1692 304.256 37.1685 304.256 37.1677C304.256 37.167 304.256 37.1662 304.256 37.1655C304.256 37.1648 304.256 37.164 304.256 37.1633C304.256 37.1626 304.256 37.1618 304.256 37.1611C304.256 37.1604 304.256 37.1596 304.256 37.1589C304.256 37.1581 304.256 37.1574 304.256 37.1567C304.256 37.1559 304.256 37.1552 304.256 37.1545C304.256 37.1537 304.256 37.153 304.256 37.1523C304.256 37.1515 304.256 37.1508 304.256 37.1501C304.256 37.1493 304.256 37.1486 304.256 37.1479C304.256 37.1471 304.256 37.1464 304.256 37.1457C304.256 37.1449 304.256 37.1442 304.256 37.1435C304.256 37.1427 304.256 37.142 304.256 37.1413C304.256 37.1405 304.256 37.1398 304.256 37.1391C304.256 37.1383 304.256 37.1376 304.256 37.1369C304.256 37.1361 304.256 37.1354 304.256 37.1347C304.256 37.1339 304.256 37.1332 304.256 37.1325C304.256 37.1318 304.256 37.131 304.256 37.1303C304.256 37.1296 304.256 37.1288 304.256 37.1281C304.256 37.1274 304.256 37.1267 304.256 37.1259C304.256 37.1252 304.256 37.1245 304.256 37.1237C304.256 37.123 304.256 37.1223 304.256 37.1216C304.256 37.1208 304.256 37.1201 304.256 37.1194C304.256 37.1187 304.256 37.1179 304.256 37.1172C304.256 37.1165 304.256 37.1158 304.256 37.115C304.256 37.1143 304.256 37.1136 304.256 37.1129C304.256 37.1121 304.256 37.1114 304.256 37.1107C304.256 37.11 304.256 37.1092 304.256 37.1085C304.256 37.1078 304.256 37.1071 304.256 37.1063C304.256 37.1056 304.256 37.1049 304.256 37.1042C304.256 37.1035 304.256 37.1027 304.256 37.102C304.256 37.1013 304.256 37.1006 304.256 37.0998C304.256 37.0991 304.256 37.0984 304.256 37.0977C304.256 37.097 304.256 37.0962 304.256 37.0955C304.256 37.0948 304.256 37.0941 304.256 37.0934C304.256 37.0926 304.256 37.0919 304.256 37.0912C304.256 37.0905 304.256 37.0898 304.256 37.089C304.256 37.0883 304.256 37.0876 304.256 37.0869C304.256 37.0862 304.256 37.0855 304.256 37.0847C304.256 37.084 304.256 37.0833 304.256 37.0826C304.256 37.0819 304.256 37.0812 304.256 37.0804C304.256 37.0797 304.256 37.079 304.256 37.0783C304.256 37.0776 304.256 37.0769 304.256 37.0761C304.256 37.0754 304.256 37.0747 304.256 37.074C304.256 37.0733 304.256 37.0726 304.256 37.0719C304.256 37.0711 304.256 37.0704 304.256 37.0697C304.256 37.069 304.256 37.0683 304.256 37.0676C304.256 37.0669 304.256 37.0661 304.256 37.0654C304.256 37.0647 304.256 37.064 304.256 37.0633C304.256 37.0626 304.256 37.0619 304.256 37.0612C304.256 37.0605 304.256 37.0597 304.256 37.059C304.256 37.0583 304.256 37.0576 304.256 37.0569C304.256 37.0562 304.256 37.0555 304.256 37.0548C304.256 37.0541 304.256 37.0534 304.256 37.0526C304.256 37.0519 304.256 37.0512 304.256 37.0505C304.256 37.0498 304.256 37.0491 304.256 37.0484C304.256 37.0477 304.256 37.047 304.256 37.0463C304.256 37.0456 304.256 37.0449 304.256 37.0441C304.256 37.0434 304.256 37.0427 304.256 37.042C304.256 37.0413 304.256 37.0406 304.256 37.0399C304.256 37.0392 304.256 37.0385 304.256 37.0378C304.256 37.0371 304.256 37.0364 304.256 37.0357C304.256 37.035 304.256 37.0343 304.256 37.0336C304.256 37.0329 304.256 37.0322 304.256 37.0315C304.256 37.0308 304.256 37.03 304.256 37.0293C304.256 37.0286 304.256 37.0279 304.256 37.0272C304.256 37.0265 304.256 37.0258 304.256 37.0251C304.256 37.0244 304.256 37.0237 304.256 37.023C304.256 37.0223 304.256 37.0216 304.256 37.0209C304.256 37.0202 304.256 37.0195 304.256 37.0188C304.256 37.0181 304.256 37.0174 304.256 37.0167C304.256 37.016 304.256 37.0153 304.256 37.0146C304.256 37.0139 304.256 37.0132 304.256 37.0125C304.256 37.0118 304.256 37.0111 304.256 37.0104C304.256 37.0097 304.256 37.009 304.256 37.0083C304.256 37.0076 304.256 37.007 304.256 37.0063C304.256 37.0056 304.256 37.0049 304.256 37.0042C304.256 37.0035 304.256 37.0028 304.256 37.0021C304.256 37.0014 304.256 37.0007 304.256 37C304.256 36.9993 304.256 36.9986 304.256 36.9979C304.256 36.9972 304.256 36.9965 304.256 36.9958C304.256 36.9951 304.256 36.9944 304.256 36.9937C304.256 36.993 304.256 36.9924 304.256 36.9917C304.256 36.991 304.256 36.9903 304.256 36.9896C304.256 36.9889 304.256 36.9882 304.256 36.9875C304.256 36.9868 304.256 36.9861 304.256 36.9854C304.256 36.9847 304.256 36.9841 304.256 36.9834C304.256 36.9827 304.256 36.982 304.256 36.9813C304.256 36.9806 304.256 36.9799 304.256 36.9792C304.256 36.9785 304.256 36.9778 304.256 36.9772C304.256 36.9765 304.256 36.9758 304.256 36.9751C304.256 36.9744 304.256 36.9737 304.256 36.973C304.256 36.9723 304.256 36.9717 304.256 36.971C304.256 36.9703 304.256 36.9696 304.256 36.9689C304.256 36.9682 304.256 36.9675 304.256 36.9668C304.256 36.9662 304.256 36.9655 304.256 36.9648C304.256 36.9641 304.256 36.9634 304.256 36.9627C304.256 36.962 304.256 36.9614 304.256 36.9607C304.256 36.96 304.256 36.9593 304.256 36.9586C304.256 36.9579 304.256 36.9573 304.256 36.9566C304.256 36.9559 304.256 36.9552 304.256 36.9545C304.256 36.9538 304.256 36.9532 304.256 36.9525C304.256 36.9518 304.256 36.9511 304.256 36.9504C304.256 36.9497 304.256 36.9491 304.256 36.9484C304.256 36.9477 304.256 36.947 304.256 36.9463C304.256 36.9457 304.256 36.945 304.256 36.9443C304.256 36.9436 304.256 36.9429 304.256 36.9423C304.256 36.9416 304.256 36.9409 304.256 36.9402C304.256 36.9395 304.256 36.9389 304.256 36.9382C304.256 36.9375 304.256 36.9368 304.256 36.9362C304.256 36.9355 304.256 36.9348 304.256 36.9341C304.256 36.9334 304.256 36.9328 304.256 36.9321C304.256 36.9314 304.256 36.9307 304.256 36.9301C304.256 36.9294 304.256 36.9287 304.256 36.928C304.256 36.9274 304.256 36.9267 304.256 36.926C304.256 36.9253 304.256 36.9247 304.256 36.924C304.256 36.9233 304.256 36.9226 304.256 36.922C304.256 36.9213 304.256 36.9206 304.256 36.9199C304.256 36.9193 304.256 36.9186 304.256 36.9179C304.256 36.9173 304.256 36.9166 304.256 36.9159C304.256 36.9152 304.256 36.9146 304.256 36.9139C304.256 36.9132 304.256 36.9126 304.256 36.9119C304.256 36.9112 304.256 36.9105 304.256 36.9099C304.256 36.9092 304.256 36.9085 304.256 36.9079C304.256 36.9072 304.256 36.9065 304.256 36.9058C304.256 36.9052 304.256 36.9045 304.256 36.9038C304.256 36.9032 304.256 36.9025 304.256 36.9018C304.256 36.9012 304.256 36.9005 304.256 36.8998C304.256 36.8992 304.256 36.8985 304.256 36.8978C304.256 36.8972 304.256 36.8965 304.256 36.8958C304.256 36.8952 304.256 36.8945 304.256 36.8938C304.256 36.8932 304.256 36.8925 304.256 36.8918C304.256 36.8912 304.256 36.8905 304.256 36.8898C304.256 36.8892 304.256 36.8885 304.256 36.8878C304.256 36.8872 304.256 36.8865 304.256 36.8859C304.256 36.8852 304.256 36.8845 304.256 36.8839C304.256 36.8832 304.256 36.8825 304.256 36.8819C304.256 36.8812 304.256 36.8806 304.256 36.8799C304.256 36.8792 304.256 36.8786 304.256 36.8779C304.256 36.8772 304.256 36.8766 304.256 36.8759C304.256 36.8753 304.256 36.8746 304.256 36.8739C304.256 36.8733 304.256 36.8726 304.256 36.872C304.256 36.8713 304.256 36.8706 304.256 36.87C304.256 36.8693 304.256 36.8687 304.256 36.868C304.256 36.8673 304.256 36.8667 304.256 36.866C304.256 36.8654 304.256 36.8647 304.256 36.8641C304.256 36.8634 304.256 36.8627 304.256 36.8621C304.256 36.8614 304.256 36.8608 304.256 36.8601C304.256 36.8595 304.256 36.8588 304.256 36.8581C304.256 36.8575 304.256 36.8568 304.256 36.8562C304.256 36.8555 304.256 36.8549 304.256 36.8542C304.256 36.8536 304.256 36.8529 304.256 36.8522C304.256 36.8516 304.256 36.8509 304.256 36.8503C304.256 36.8496 304.256 36.849 304.256 36.8483C304.256 36.8477 304.256 36.847 304.256 36.8464C304.256 36.8457 304.256 36.8451 304.256 36.8444C304.256 36.8438 304.256 36.8431 304.256 36.8425C304.256 36.8418 304.256 36.8411 304.256 36.8405C304.256 36.8398 304.256 36.8392 304.256 36.8385C304.256 36.8379 304.256 36.8372 304.256 36.8366C304.256 36.8359 304.256 36.8353 304.256 36.8346C304.256 36.834 304.256 36.8333 304.256 36.8327C304.256 36.8321 304.256 36.8314 304.256 36.8308C304.256 36.8301 304.256 36.8295 304.256 36.8288C304.256 36.8282 304.256 36.8275 304.256 36.8269C304.256 36.8262 304.256 36.8256 304.256 36.8249C304.256 36.8243 304.256 36.8236 304.256 36.823C304.256 36.8223 304.256 36.8217 304.256 36.8211C304.256 36.8204 304.256 36.8198 304.256 36.8191C304.256 36.8185 304.256 36.8178 304.256 36.8172C304.256 36.8165 304.256 36.8159 304.256 36.8153C304.256 36.8146 304.256 36.814 304.256 36.8133C304.256 36.8127 304.256 36.812 304.256 36.8114C304.256 36.8108 304.256 36.8101 304.256 36.8095C304.256 36.8088 304.256 36.8082 304.256 36.8075C304.256 36.8069 304.256 36.8063 304.256 36.8056C304.256 36.805 304.256 36.8043 304.256 36.8037C304.256 36.8031 304.256 36.8024 304.256 36.8018C304.256 36.8011 304.256 36.8005 304.256 36.7999C304.256 36.7992 304.256 36.7986 304.256 36.7979C304.256 36.7973 304.256 36.7967 304.256 36.796C304.256 36.7954 304.256 36.7948 304.256 36.7941C304.256 36.7935 304.256 36.7928 304.256 36.7922C304.256 36.7916 304.256 36.7909 304.256 36.7903C304.256 36.7897 304.256 36.789 304.256 36.7884C304.256 36.7878 304.256 36.7871 304.256 36.7865C304.256 36.7858 304.256 36.7852 304.256 36.7846C304.256 36.7839 304.256 36.7833 304.256 36.7827C304.256 36.782 304.256 36.7814 304.256 36.7808C304.256 36.7801 304.256 36.7795 304.256 36.7789C304.256 36.7782 304.256 36.7776 304.256 36.777C304.256 36.7763 304.256 36.7757 304.256 36.7751C304.256 36.7744 304.256 36.7738 304.256 36.7732C304.256 36.7725 304.256 36.7719 304.256 36.7713C304.256 36.7707 304.256 36.77 304.256 36.7694C304.256 36.7688 304.256 36.7681 304.256 36.7675C304.256 36.7669 304.256 36.7662 304.256 36.7656C304.256 36.765 304.256 36.7644 304.256 36.7637C304.256 36.7631 304.256 36.7625 304.256 36.7618C304.256 36.7612 304.256 36.7606 304.256 36.76C304.256 36.7593 304.256 36.7587 304.256 36.7581C304.256 36.7575 304.256 36.7568 304.256 36.7562C304.256 36.7556 304.256 36.7549 304.256 36.7543C304.256 36.7537 304.256 36.7531 304.256 36.7524C304.256 36.7518 304.256 36.7512 304.256 36.7506C304.256 36.7499 304.256 36.7493 304.256 36.7487C304.256 36.7481 304.256 36.7475 304.256 36.7468C304.256 36.7462 304.256 36.7456 304.256 36.745C304.256 36.7443 304.256 36.7437 304.256 36.7431C304.256 36.7425 304.256 36.7418 304.256 36.7412C304.256 36.7406 304.256 36.74 304.256 36.7394C304.256 36.7387 304.256 36.7381 304.256 36.7375C304.256 36.7369 304.256 36.7363 304.256 36.7356C304.256 36.735 304.256 36.7344 304.256 36.7338C304.256 36.7332 304.256 36.7325 304.256 36.7319C304.256 36.7313 304.256 36.7307 304.256 36.7301C304.256 36.7294 304.256 36.7288 304.256 36.7282C304.256 36.7276 304.256 36.727 304.256 36.7264C304.256 36.7257 304.256 36.7251 304.256 36.7245C304.256 36.7239 304.256 36.7233 304.256 36.7226C304.256 36.722 304.256 36.7214 304.256 36.7208C304.256 36.7202 304.256 36.7196 304.256 36.719C304.256 36.7183 304.256 36.7177 304.256 36.7171C304.256 36.7165 304.256 36.7159 304.256 36.7153C304.256 36.7147 304.256 36.714 304.256 36.7134C304.256 36.7128 304.256 36.7122 304.256 36.7116C304.256 36.711 304.256 36.7104 304.256 36.7098C304.256 36.7091 304.256 36.7085 304.256 36.7079C304.256 36.7073 304.256 36.7067 304.256 36.7061C304.256 36.7055 304.256 36.7049 304.256 36.7042C304.256 36.7036 304.256 36.703 304.256 36.7024C304.256 36.7018 304.256 36.7012 304.256 36.7006C304.256 36.7 304.256 36.6994 304.256 36.6988C304.256 36.6981 304.256 36.6975 304.256 36.6969C304.256 36.6963 304.256 36.6957 304.256 36.6951C304.256 36.6945 304.256 36.6939 304.256 36.6933C304.256 36.6927 304.256 36.6921 304.256 36.6915C304.256 36.6909 304.256 36.6903 304.256 36.6896C304.256 36.689 304.256 36.6884 304.256 36.6878C304.256 36.6872 304.256 36.6866 304.256 36.686C304.256 36.6854 304.256 36.6848 304.256 36.6842C304.256 36.6836 304.256 36.683 304.256 36.6824C304.256 36.6818 304.256 36.6812 304.256 36.6806C304.256 36.68 304.256 36.6794 304.256 36.6788C304.256 36.6782 304.256 36.6776 304.256 36.677C304.256 36.6763 304.256 36.6758 304.256 36.6751C304.256 36.6745 304.256 36.6739 304.256 36.6733C304.256 36.6727 304.256 36.6721 304.256 36.6715C304.256 36.6709 304.256 36.6703 304.256 36.6697C304.256 36.6691 304.256 36.6685 304.256 36.6679C304.256 36.6673 304.256 36.6667 304.256 36.6661C304.256 36.6655 304.256 36.6649 304.256 36.6643C304.256 36.6637 304.256 36.6632 304.256 36.6626C304.256 36.662 304.256 36.6614 304.256 36.6608C304.256 36.6602 304.256 36.6596 304.256 36.659C304.256 36.6584 304.256 36.6578 304.256 36.6572C304.256 36.6566 304.256 36.656 304.256 36.6554C304.256 36.6548 304.256 36.6542 304.256 36.6536C304.256 36.653 304.256 36.6524 304.256 36.6518C304.256 36.6512 304.256 36.6506 304.256 36.65C304.256 36.6494 304.256 36.6488 304.256 36.6483C304.256 36.6477 304.256 36.6471 304.256 36.6465C304.256 36.6459 304.256 36.6453 304.256 36.6447C304.256 36.6441 304.256 36.6435 304.256 36.6429C304.256 36.6423 304.256 36.6417 304.256 36.6412C304.256 36.6406 304.256 36.64 304.256 36.6394C304.256 36.6388 304.256 36.6382 304.256 36.6376C304.256 36.637 304.256 36.6364 304.256 36.6358C304.256 36.6352 304.256 36.6347 304.256 36.6341C304.256 36.6335 304.256 36.6329 304.256 36.6323C304.256 36.6317 304.256 36.6311 304.256 36.6305C304.256 36.63 304.256 36.6294 304.256 36.6288C304.256 36.6282 304.256 36.6276 304.256 36.627C304.256 36.6264 304.256 36.6258 304.256 36.6253C304.256 36.6247 304.256 36.6241 304.256 36.6235C304.256 36.6229 304.256 36.6223 304.256 36.6217C304.256 36.6212 304.256 36.6206 304.256 36.62C304.256 36.6194 304.256 36.6188 304.256 36.6182C304.256 36.6177 304.256 36.6171 304.256 36.6165C304.256 36.6159 304.256 36.6153 304.256 36.6147C304.256 36.6142 304.256 36.6136 304.256 36.613C304.256 36.6124 304.256 36.6118 304.256 36.6112C304.256 36.6107 304.256 36.6101 304.256 36.6095C304.256 36.6089 304.256 36.6083 304.256 36.6078C304.256 36.6072 304.256 36.6066 304.256 36.606C304.256 36.6054 304.256 36.6049 304.256 36.6043C304.256 36.6037 304.256 36.6031 304.256 36.6025C304.256 36.602 304.256 36.6014 304.256 36.6008C304.256 36.6002 304.256 36.5996 304.256 36.5991C304.256 36.5985 304.256 36.5979 304.256 36.5973C304.256 36.5968 304.256 36.5962 304.256 36.5956C304.256 36.595 304.256 36.5945 304.256 36.5939C304.256 36.5933 304.256 36.5927 304.256 36.5922C304.256 36.5916 304.256 36.591 304.256 36.5904C304.256 36.5899 304.256 36.5893 304.256 36.5887C304.256 36.5881 304.256 36.5876 304.256 36.587C304.256 36.5864 304.256 36.5858 304.256 36.5853C304.256 36.5847 304.256 36.5841 304.256 36.5835C304.256 36.583 304.256 36.5824 304.256 36.5818C304.256 36.5812 304.256 36.5807 304.256 36.5801C304.256 36.5795 304.256 36.579 304.256 36.5784C304.256 36.5778 304.256 36.5773 304.256 36.5767C304.256 36.5761 304.256 36.5755 304.256 36.575C304.256 36.5744 304.256 36.5738 304.256 36.5733C304.256 36.5727 304.256 36.5721 304.256 36.5716C304.256 36.571 304.256 36.5704 304.256 36.5698C304.256 36.5693 304.256 36.5687 304.256 36.5681C304.256 36.5676 304.256 36.567 304.256 36.5664C304.256 36.5659 304.256 36.5653 304.256 36.5647C304.256 36.5642 304.256 36.5636 304.256 36.563C304.256 36.5625 304.256 36.5619 304.256 36.5613C304.256 36.5608 304.256 36.5602 304.256 36.5597C304.256 36.5591 304.256 36.5585 304.256 36.558C304.256 36.5574 304.256 36.5568 304.256 36.5563C304.256 36.5557 304.256 36.5551 304.256 36.5546C304.256 36.554 304.256 36.5534 304.256 36.5529C304.256 36.5523 304.256 36.5518 304.256 36.5512C304.256 36.5506 304.256 36.5501 304.256 36.5495C304.256 36.549 304.256 36.5484 304.256 36.5478C304.256 36.5473 304.256 36.5467 304.256 36.5461C304.256 36.5456 304.256 36.545 304.256 36.5445C304.256 36.5439 304.256 36.5433 304.256 36.5428C304.256 36.5422 304.256 36.5417 304.256 36.5411C304.256 36.5406 304.256 36.54 304.256 36.5394C304.256 36.5389 304.256 36.5383 304.256 36.5378C304.256 36.5372 304.256 36.5366 304.256 36.5361C304.256 36.5355 304.256 36.535 304.256 36.5344C304.256 36.5339 304.256 36.5333 304.256 36.5327C304.256 36.5322 304.256 36.5316 304.256 36.5311C304.256 36.5305 304.256 36.53 304.256 36.5294C304.256 36.5289 304.256 36.5283 304.256 36.5278C304.256 36.5272 304.256 36.5266 304.256 36.5261C304.256 36.5255 304.256 36.525 304.256 36.5244C304.256 36.5239 304.256 36.5233 304.256 36.5228C304.256 36.5222 304.256 36.5217 304.256 36.5211C304.256 36.5206 304.256 36.52 304.256 36.5195C304.256 36.5189 304.256 36.5184 304.256 36.5178C304.256 36.5173 304.256 36.5167 304.256 36.5162C304.256 36.5156 304.256 36.5151 304.256 36.5145C304.256 36.514 304.256 36.5134 304.256 36.5129C304.256 36.5123 304.256 36.5118 304.256 36.5112C304.256 36.5107 304.256 36.5101 304.256 36.5096C304.256 36.509 304.256 36.5085 304.256 36.5079C304.256 36.5074 304.256 36.5068 304.256 36.5063C304.256 36.5057 304.256 36.5052 304.256 36.5046C304.256 36.5041 304.256 36.5035 304.256 36.503C304.256 36.5025 304.256 36.5019 304.256 36.5014C304.256 36.5008 304.256 36.5003 304.256 36.4997C304.256 36.4992 304.256 36.4986 304.256 36.4981C304.256 36.4976 304.256 36.497 304.256 36.4965C304.256 36.4959 304.256 36.4954 304.256 36.4948C304.256 36.4943 304.256 36.4937 304.256 36.4932C304.256 36.4927 304.256 36.4921 304.256 36.4916C304.256 36.491 304.256 36.4905 304.256 36.49C304.256 36.4894 304.256 36.4889 304.256 36.4883C304.256 36.4878 304.256 36.4872 304.256 36.4867C304.256 36.4862 304.256 36.4856 304.256 36.4851C304.256 36.4845 304.256 36.484 304.256 36.4835C304.256 36.4829 304.256 36.4824 304.256 36.4819C304.256 36.4813 304.256 36.4808 304.256 36.4802C304.256 36.4797 304.256 36.4792 304.256 36.4786C304.256 36.4781 304.256 36.4776 304.256 36.477C304.256 36.4765 304.256 36.4759 304.256 36.4754C304.256 36.4749 304.256 36.4743 304.256 36.4738C304.256 36.4733 304.256 36.4727 304.256 36.4722C304.256 36.4717 304.256 36.4711 304.256 36.4706C304.256 36.47 304.256 36.4695 304.256 36.469C304.256 36.4684 304.256 36.4679 304.256 36.4674C304.256 36.4668 304.256 36.4663 304.256 36.4658C304.256 36.4652 304.256 36.4647 304.256 36.4642C304.256 36.4636 304.256 36.4631 304.256 36.4626C304.256 36.4621 304.256 36.4615 304.256 36.461C304.256 36.4605 304.256 36.4599 304.256 36.4594C304.256 36.4589 304.256 36.4583 304.256 36.4578C304.256 36.4573 304.256 36.4567 304.256 36.4562C304.256 36.4557 304.256 36.4552 304.256 36.4546C304.256 36.4541 304.256 36.4536 304.256 36.453C304.256 36.4525 304.256 36.452 304.256 36.4515C304.256 36.4509 304.256 36.4504 304.256 36.4499C304.256 36.4493 304.256 36.4488 304.256 36.4483C304.256 36.4478 304.256 36.4472 304.256 36.4467C304.256 36.4462 304.256 36.4457 304.256 36.4451C304.256 36.4446 304.256 36.4441 304.256 36.4436C304.256 36.443 304.256 36.4425 304.256 36.442C304.256 36.4415 304.256 36.4409 304.256 36.4404C304.256 36.4399 304.256 36.4394 304.256 36.4388C304.256 36.4383 304.256 36.4378 304.256 36.4373C304.256 36.4367 304.256 36.4362 304.256 36.4357C304.256 36.4352 304.256 36.4347 304.256 36.4341C304.256 36.4336 304.256 36.4331 304.256 36.4326C304.256 36.432 304.256 36.4315 304.256 36.431C304.256 36.4305 304.256 36.43 304.256 36.4294C304.256 36.4289 304.256 36.4284 304.256 36.4279C304.256 36.4274 304.256 36.4268 304.256 36.4263C304.256 36.4258 304.256 36.4253 304.256 36.4248C304.256 36.4242 304.256 36.4237 304.256 36.4232C304.256 36.4227 304.256 36.4222 304.256 36.4217C304.256 36.4211 304.256 36.4206 304.256 36.4201C304.256 36.4196 304.256 36.4191 304.256 36.4186C304.256 36.418 304.256 36.4175 304.256 36.417C304.256 36.4165 304.256 36.416 304.256 36.4155C304.256 36.4149 304.256 36.4144 304.256 36.4139C304.256 36.4134 304.256 36.4129 304.256 36.4124C304.256 36.4119 304.256 36.4113 304.256 36.4108C304.256 36.4103 304.256 36.4098 304.256 36.4093C304.256 36.4088 304.256 36.4083 304.256 36.4078C304.256 36.4072 304.256 36.4067 304.256 36.4062C304.256 36.4057 304.256 36.4052 304.256 36.4047C304.256 36.4042 304.256 36.4037 304.256 36.4032C304.256 36.4026 304.256 36.4021 304.256 36.4016C304.256 36.4011 304.256 36.4006 304.256 36.4001C304.256 36.3996 304.256 36.3991 304.256 36.3986C304.256 36.3981 304.256 36.3975 304.256 36.397C304.256 36.3965 304.256 36.396 304.256 36.3955C304.256 36.395 304.256 36.3945 304.256 36.394C304.256 36.3935 304.256 36.393 304.256 36.3925C304.256 36.392 304.256 36.3915 304.256 36.3909C304.256 36.3904 304.256 36.3899 304.256 36.3894C304.256 36.3889 304.256 36.3884 304.256 36.3879C304.256 36.3874 304.256 36.3869 304.256 36.3864C304.256 36.3859 304.256 36.3854 304.256 36.3849C304.256 36.3844 304.256 36.3839 304.256 36.3834C304.256 36.3829 304.256 36.3824 304.256 36.3819C304.256 36.3814 304.256 36.3809 304.256 36.3804C304.256 36.3799 304.256 36.3794 304.256 36.3789C304.256 36.3783 304.256 36.3778 304.256 36.3773C304.256 36.3768 304.256 36.3763 304.256 36.3758C304.256 36.3753 304.256 36.3748 304.256 36.3743C304.256 36.3738 304.256 36.3733 304.256 36.3728C304.256 36.3723 304.256 36.3718 304.256 36.3713C304.256 36.3708 304.256 36.3703 304.256 36.3699C304.256 36.3694 304.256 36.3689 304.256 36.3684C304.256 36.3679 304.256 36.3674 304.256 36.3669C304.256 36.3664 304.256 36.3659 304.256 36.3654C304.256 36.3649 304.256 36.3644 304.256 36.3639C304.256 36.3634 304.256 36.3629 304.256 36.3624C304.256 36.3619 304.256 36.3614 304.256 36.3609C304.256 36.3604 304.256 36.3599 304.256 36.3594C304.256 36.3589 304.256 36.3584 304.256 36.3579C304.256 36.3574 304.256 36.357 304.256 36.3565C304.256 36.356 304.256 36.3555 304.256 36.355C304.256 36.3545 304.256 36.354 304.256 36.3535C304.256 36.353 304.256 36.3525 304.256 36.352C304.256 36.3515 304.256 36.351 304.256 36.3506C304.256 36.3501 304.256 36.3496 304.256 36.3491C304.256 36.3486 304.256 36.3481 304.256 36.3476C304.256 36.3471 304.256 36.3466 304.256 36.3461C304.256 36.3456 304.256 36.3452 304.256 36.3447C304.256 36.3442 304.256 36.3437 304.256 36.3432C304.256 36.3427 304.256 36.3422 304.256 36.3417C304.256 36.3413 304.256 36.3408 304.256 36.3403C304.256 36.3398 304.256 36.3393 304.256 36.3388C304.256 36.3383 304.256 36.3378 304.256 36.3374C304.256 36.3369 304.256 36.3364 304.256 36.3359C304.256 36.3354 304.256 36.3349 304.256 36.3344C304.256 36.334 304.256 36.3335 304.256 36.333C304.256 36.3325 304.256 36.332 304.256 36.3315C304.256 36.3311 304.256 36.3306 304.256 36.3301C304.256 36.3296 304.256 36.3291 304.256 36.3286C304.256 36.3282 304.256 36.3277 304.256 36.3272C304.256 36.3267 304.256 36.3262 304.256 36.3257C304.256 36.3253 304.256 36.3248 304.256 36.3243C304.256 36.3238 304.256 36.3233 304.256 36.3229C304.256 36.3224 304.256 36.3219 304.256 36.3214C304.256 36.3209 304.256 36.3205 304.256 36.32C304.256 36.3195 304.256 36.319 304.256 36.3185C304.256 36.3181 304.256 36.3176 304.256 36.3171C304.256 36.3166 304.256 36.3162 304.256 36.3157C304.256 36.3152 304.256 36.3147 304.256 36.3142C304.256 36.3138 304.256 36.3133 304.256 36.3128H303.256ZM303.256 37.2646V44H304.256V37.2646H303.256ZM303.756 43.5H299.951V44.5H303.756V43.5ZM300.451 44V37.2646H299.451V44H300.451ZM300.451 37.2646C300.451 36.5422 300.477 35.9507 300.525 35.486L299.53 35.3826C299.477 35.894 299.451 36.5227 299.451 37.2646H300.451ZM300.525 35.486C300.568 35.0675 300.7 34.6397 300.928 34.2006L300.04 33.7395C299.761 34.2766 299.588 34.8249 299.53 35.3826L300.525 35.486ZM300.928 34.2006C301.143 33.7867 301.526 33.3213 302.109 32.8076L301.447 32.0576C300.812 32.6176 300.333 33.1772 300.04 33.7395L300.928 34.2006ZM302.124 32.7929C302.72 32.2198 303.546 31.4968 304.607 30.622L303.971 29.8505C302.901 30.7328 302.053 31.474 301.431 32.0723L302.124 32.7929ZM304.604 30.6246L323.02 15.6895L322.39 14.9128L303.974 29.8479L304.604 30.6246ZM321.095 13.9625L303.211 28.6048L303.845 29.3785L321.728 14.7363L321.095 13.9625ZM303.215 28.6016C301.99 29.5837 301.033 30.4285 300.353 31.1336L301.072 31.8281C301.711 31.1666 302.631 30.3519 303.841 29.3818L303.215 28.6016ZM300.366 31.1205C299.685 31.7757 299.147 32.4191 298.763 33.0519L299.618 33.5704C299.945 33.0318 300.421 32.455 301.059 31.8412L300.366 31.1205ZM298.763 33.0519C298.38 33.683 298.127 34.327 298.013 34.9829L298.998 35.1536C299.088 34.638 299.29 34.1107 299.618 33.5704L298.763 33.0519ZM298.007 35.0251C297.955 35.6302 297.929 36.3779 297.929 37.2646H298.929C298.929 36.3941 298.955 35.6776 299.004 35.1114L298.007 35.0251ZM297.929 37.2646V44H298.929V37.2646H297.929ZM298.429 43.5H294.625V44.5H298.429V43.5ZM295.125 44V37.2646H294.125V44H295.125ZM295.125 37.2646C295.125 36.0996 295.15 35.1098 295.2 34.2934L294.202 34.2324C294.15 35.0754 294.125 36.0868 294.125 37.2646H295.125ZM295.197 34.3236C295.289 33.5669 295.544 32.8263 295.969 32.0993L295.106 31.5945C294.618 32.4294 294.315 33.2994 294.204 34.2022L295.197 34.3236ZM295.969 32.0993C296.394 31.3721 297.07 30.554 298.015 29.6448L297.322 28.9242C296.339 29.8697 295.594 30.7598 295.106 31.5945L295.969 32.0993ZM298.015 29.6448C298.965 28.7306 300.298 27.5687 302.019 26.1569L301.385 25.3839C299.655 26.8029 298.299 27.9837 297.322 28.9242L298.015 29.6448ZM302.019 26.1566L319.827 11.5143L319.191 10.7419L301.384 25.3842L302.019 26.1566ZM319.814 11.5244C320.825 10.7466 321.535 10.0832 321.844 9.54787L320.979 9.0478C320.78 9.39103 320.223 9.94782 319.204 10.7319L319.814 11.5244ZM321.836 9.56243C322.207 8.96726 322.368 8.20523 322.368 7.32113H321.368C321.368 8.09649 321.225 8.65226 320.987 9.03324L321.836 9.56243ZM322.368 7.32113V0.0732099H321.368V7.32113H322.368ZM321.868 0.57321H325.673V-0.42679H321.868V0.57321ZM325.173 0.0732099V7.32113H326.173V0.0732099H325.173ZM325.173 7.32113C325.173 8.03186 325.124 8.6338 325.03 9.13177L326.012 9.31748C326.121 8.74168 326.173 8.07463 326.173 7.32113H325.173ZM325.024 9.17293C324.982 9.57344 324.835 9.98962 324.564 10.4243L325.412 10.9534C325.75 10.4119 325.958 9.85196 326.018 9.27632L325.024 9.17293ZM324.544 10.4583C324.32 10.89 323.948 11.3885 323.409 11.9546L324.133 12.6444C324.709 12.0391 325.149 11.4639 325.432 10.9194L324.544 10.4583ZM323.424 11.9392C322.88 12.4626 322.105 13.1362 321.095 13.9624L321.728 14.7365C322.747 13.9032 323.545 13.2102 324.117 12.6598L323.424 11.9392ZM303.293 16.1085L308.239 18.7441L308.71 17.8616L303.763 15.226L303.293 16.1085ZM308.157 17.9164L305.037 20.4788L305.672 21.2516L308.792 18.6892L308.157 17.9164ZM305.599 20.4292L301.946 18.3793L301.457 19.2513L305.11 21.3013L305.599 20.4292ZM301.938 18.3748C299.832 17.2438 298.173 15.6934 296.952 13.7203L296.102 14.2464C297.418 16.3731 299.208 18.0441 301.465 19.2558L301.938 18.3748ZM296.952 13.7203C295.732 11.7487 295.125 9.61898 295.125 7.32113H294.125C294.125 9.80642 294.785 12.1181 296.102 14.2464L296.952 13.7203ZM295.125 7.32113V0.0732099H294.125V7.32113H295.125ZM294.625 0.57321H298.429V-0.42679H294.625V0.57321ZM297.929 0.0732099V7.32113H298.929V0.0732099H297.929ZM297.929 7.32113C297.929 9.1237 298.413 10.8233 299.371 12.4114L300.227 11.8947C299.359 10.4568 298.929 8.93509 298.929 7.32113H297.929ZM299.371 12.4114C300.332 14.0028 301.642 15.2376 303.295 16.1094L303.761 15.225C302.269 14.4374 301.093 13.3294 300.227 11.8947L299.371 12.4114ZM327.695 44V37.2646H326.695V44H327.695ZM327.695 37.2646C327.695 35.4617 327.212 33.784 326.25 32.2412L325.401 32.7704C326.265 34.1561 326.695 35.6508 326.695 37.2646H327.695ZM326.26 32.2582C325.347 30.6565 324.03 29.4183 322.324 28.5465L321.869 29.4369C323.41 30.2245 324.579 31.3291 325.391 32.7534L326.26 32.2582ZM322.334 28.5519L317.464 25.9163L316.988 26.7958L321.858 29.4314L322.334 28.5519ZM317.539 26.7462L320.735 24.1838L320.109 23.4036L316.913 25.966L317.539 26.7462ZM320.18 24.2313L323.757 26.208L324.241 25.3328L320.664 23.3561L320.18 24.2313ZM323.75 26.2043C325.81 27.3839 327.449 28.9608 328.672 30.9386L329.523 30.4125C328.21 28.2904 326.449 26.5972 324.247 25.3365L323.75 26.2043ZM328.675 30.9432C329.892 32.8635 330.5 34.9668 330.5 37.2646H331.5C331.5 34.7792 330.839 32.4898 329.52 30.4079L328.675 30.9432ZM330.5 37.2646V44H331.5V37.2646H330.5ZM331 43.5H327.195V44.5H331V43.5ZM325.673 43.5H321.868V44.5H325.673V43.5ZM322.368 44V37.2646H321.368V44H322.368ZM322.368 37.2646C322.368 36.3794 322.107 35.5514 321.599 34.7904L320.767 35.346C321.172 35.9516 321.368 36.5879 321.368 37.2646H322.368ZM321.613 34.8129C321.161 34.0513 320.537 33.452 319.75 33.0194L319.268 33.8957C319.902 34.2441 320.394 34.7186 320.753 35.3236L321.613 34.8129ZM319.747 33.018L313.127 29.4306L312.65 30.3098L319.271 33.8972L319.747 33.018ZM313.2 30.2611L316.32 27.7719L315.697 26.9902L312.577 29.4794L313.2 30.2611ZM315.775 27.8231L321.178 30.6783L321.645 29.7942L316.242 26.939L315.775 27.8231ZM321.169 30.6734C322.413 31.3638 323.388 32.3029 324.103 33.4951L324.96 32.9808C324.153 31.635 323.048 30.573 321.654 29.7991L321.169 30.6734ZM324.107 33.5025C324.818 34.6418 325.173 35.8921 325.173 37.2646H326.173C326.173 35.7086 325.767 34.2744 324.956 32.9733L324.107 33.5025ZM325.173 37.2646V44H326.173V37.2646H325.173Z\",\"fill\":\"black\",\"mask\":\"url(#path-1-inside-1)\",\"key\":9}),React.createElement(\"defs\",{\"key\":10},[React.createElement(\"linearGradient\",{\"id\":\"paint0_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":0},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint1_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":1},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint2_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":2},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint3_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":3},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint4_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":4},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint5_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":5},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint6_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":6},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})]),React.createElement(\"linearGradient\",{\"id\":\"paint7_linear\",\"x1\":\"331\",\"y1\":\"22\",\"x2\":\"2.44977e-06\",\"y2\":\"22\",\"gradientUnits\":\"userSpaceOnUse\",\"key\":7},[React.createElement(\"stop\",{\"offset\":\"0.0729167\",\"stopColor\":\"#7B8EB7\",\"key\":0}),React.createElement(\"stop\",{\"offset\":\"1\",\"stopColor\":\"#9795B8\",\"key\":1})])])]);\n}\n\nMetaplexInline.defaultProps = {\"width\":\"331\",\"height\":\"44\",\"viewBox\":\"0 0 331 44\",\"fill\":\"none\"};\n\nmodule.exports = MetaplexInline;\n\nMetaplexInline.default = MetaplexInline;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js b/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js new file mode 100644 index 0000000..ee44d47 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js @@ -0,0 +1,3 @@ +/*! For license information please see component---src-pages-index-tsx-dc693e317fbf62305a31.js.LICENSE.txt */ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[691],{5270:function(e){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=new Array(t);r=o?(n[a++]=parseInt(r/o,10),r%=o):a>0&&(n[a++]=0);s=a,l=this.dstAlphabet.slice(r,r+1).concat(l)}while(0!==a);return l},t.prototype.isValid=function(e){for(var t=0;t?@[]^_`{|}~"},l.uuid=d,l.generate=function(){return s||(s=l(u).generate),s()},l)},5662:function(e,t,r){"use strict";var a;r.d(t,{v4:function(){return u}});var n=new Uint8Array(16);function i(){if(!a&&!(a="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return a(n)}var o=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var s=function(e){return"string"==typeof e&&o.test(e)},l=[],c=0;c<256;++c)l.push((c+256).toString(16).substr(1));var d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(l[e[t+0]]+l[e[t+1]]+l[e[t+2]]+l[e[t+3]]+"-"+l[e[t+4]]+l[e[t+5]]+"-"+l[e[t+6]]+l[e[t+7]]+"-"+l[e[t+8]]+l[e[t+9]]+"-"+l[e[t+10]]+l[e[t+11]]+l[e[t+12]]+l[e[t+13]]+l[e[t+14]]+l[e[t+15]]).toLowerCase();if(!s(r))throw TypeError("Stringified UUID is invalid");return r};var u=function(e,t,r){var a=(e=e||{}).random||(e.rng||i)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){r=r||0;for(var n=0;n<16;++n)t[r+n]=a[n];return t}return d(a)}},5221:function(e,t,r){var a=r(1207),n=["blank","all","minWidth","minHeight","maxWidth","maxHeight","print"];function i(e){return function(t,r){var a=t.sortVal,n=r.sortVal,i=t.item.__media,o=r.item.__media;if(e=void 0!==e&&e,a===n){if(i.match(/print/))return 1;if(o.match(/print/))return-1}return e?n-a:a-n}}function o(e,t,r){switch(function(e,t,r){return e&&e.length&&"string"!=typeof e?("object"!==t||r&&"string"==typeof r)&&function(e,t,r){for(var a=!0,n=0,i=e.length;n=0||(n[r]=e[r]);return n}(e,["image","children"]),i=t&&ae(t);return i?a.createElement(X.Z,Object.assign({},i,n),r):a.createElement("div",null,r)};var ie=(0,o.Z)(ne,{target:"e3tzkbv0"})({name:"1mzflyn",styles:"display:flex;flex-direction:column;justify-content:center;align-items:center;--tw-text-opacity:1;color:rgba(255, 255, 255, var(--tw-text-opacity));padding-left:2.5rem;padding-right:2.5rem;padding-top:5rem;padding-bottom:13rem;@media (min-width: 768px){padding-left:13rem;padding-right:13rem;} p{width:50%;text-align:center;font-size:20px;line-height:32px;;}"}),oe=function(){var e=(0,s.useStaticQuery)("3690696666"),t=e.footer,r=e.footerBg,n=(0,l.d)(r);return(0,u.tZ)(a.Fragment,null,(0,u.tZ)(ie,{image:n},(0,u.tZ)("h3",null,t.frontmatter.title),(0,u.tZ)("p",null,t.rawMarkdownBody),(0,u.tZ)(d,null,t.frontmatter.button)))},se=function(){return(0,u.tZ)(n.Z,{isHome:!0},(0,u.tZ)(i.Z,null),(0,u.tZ)(v,null),(0,u.tZ)(D,null),(0,u.tZ)(I,null),(0,u.tZ)(H,null),(0,u.tZ)(oe,null))}},6162:function(e,t,r){"use strict";var a=r(4859);t.Z=void 0;var n=a(r(8834)),i=a(r(8527)),o=a(r(8111)),s=a(r(7111)),l=a(r(2784)),c=a(r(3980)),d=a(r(3008)),u=r(9827),f=r(3441),m=r(2038),p=r(2029),g=r(4583),h=r(6675),y=r(8676),v=r(1141),b=r(7257),x=function(e){function t(t){var r;(r=e.call(this,t)||this).intersectionListener=function(){var e=(0,m.inImageCache)(r.props);r.state.isVisible||"function"!=typeof r.props.onStartLoad||r.props.onStartLoad({wasCached:e}),r.imageRef=(0,p.activatePictureRef)(r.imageRef,r.props,r.selfRef),r.setState((function(e){return{isVisible:!0,imageState:e.imageState+1}}),(function(){r.setState((function(t){return{imgLoaded:e,imgCached:(0,p.hasActivatedPictureRefs)(r.imageRef),imageState:t.imageState+1}}))}))};var a=(0,u.convertProps)(t),n=!0,s=!1,l=a.fadeIn,c=(0,m.inImageCache)(a);!c&&(0,b.isBrowser)()&&window.IntersectionObserver&&(n=!1,s=!0),(0,b.isBrowser)()||(n=!1),a.critical&&(n=!0,s=!1);var f=!(a.critical&&!l||(0,b.isBrowser)()),g=(0,h.fixClassName)(a)[0];return r.backgroundStyles=(0,h.presetBackgroundStyles)((0,d.default)(a.className)),r.handleImageLoaded=r.handleImageLoaded.bind((0,o.default)(r)),r.handleRef=r.handleRef.bind((0,o.default)(r)),r.imageRef=(0,p.createPictureRef)((0,i.default)({},a,{isVisible:n}),r.handleImageLoaded),r.selfRef=null,r.state={isVisible:n,imgLoaded:!1,IOSupported:s,fadeIn:l,hasNoScript:f,seenBefore:c,imageState:0,currentClassNames:g},r}(0,s.default)(t,e);var r=t.prototype;return r.componentDidMount=function(){this.backgroundStyles=(0,h.presetBackgroundStyles)((0,d.default)(this.props.className)),this.state.isVisible&&"function"==typeof this.props.onStartLoad&&this.props.onStartLoad({wasCached:(0,m.inImageCache)(this.props)}),(this.props.critical||this.state.seenBefore)&&(0,p.imageReferenceCompleted)(this.imageRef,this.props)&&this.handleImageLoaded();var e=(0,h.fixClassName)(this.props)[0];this.setState({currentClassNames:e})},r.componentDidUpdate=function(e){var t=this;if((0,f.imagePropsChanged)(this.props,e)){var r=(0,u.convertProps)(this.props),a=(0,m.inImageCache)(r),n=(0,h.fixClassName)(r)[0];this.setState({isVisible:a||r.critical,imgLoaded:a,seenBefore:a,currentClassNames:n},(function(){t.bgImage=(0,f.getCurrentFromData)({data:t.imageRef,propName:"currentSrc",returnArray:!0})||(0,f.getCurrentFromData)({data:t.imageRef,propName:"src",returnArray:!0}),t.imageRef=(0,p.createPictureRef)((0,i.default)({},r,{isVisible:t.state.isVisible}),t.handleImageLoaded)}))}},r.componentWillUnmount=function(){this.imageRef&&(Array.isArray(this.imageRef)?this.imageRef.forEach((function(e){e&&!(0,b.isString)(e)&&(e.onload=null)})):this.imageRef.onload=null),this.cleanUpListeners&&this.cleanUpListeners()},r.handleRef=function(e){this.selfRef=e,this.state.IOSupported&&e&&(this.cleanUpListeners=(0,v.listenToIntersections)(e,this.intersectionListener,this.props.rootMargin))},r.handleImageLoaded=function(){(0,m.activateCacheForImage)(this.props),this.setState((function(e){return{imgLoaded:!0,imageState:e.imageState+1}})),this.state.seenBefore&&this.setState({fadeIn:!1}),this.props.onLoad&&this.props.onLoad()},r.render=function(){var e=(0,h.fixOpacity)((0,u.convertProps)(this.props),this.props.preserveStackingContext),t=(e.className,e.style),r=void 0===t?{}:t,a=e.fluid,o=e.fixed,s=e.backgroundColor,c=e.durationFadeIn,d=e.Tag,m=e.children,p=e.keepStatic,v=(0,n.default)(e,["className","style","fluid","fixed","backgroundColor","durationFadeIn","Tag","children","keepStatic"]),b=(0,u.stripRemainingProps)(v),x="boolean"==typeof s?"lightgray":void 0!==s?s:"",w=!0===this.state.fadeIn&&!this.state.imgCached||"soft"===this.props.fadeIn,S=w?c/2+"ms":"none",A=(0,i.default)({position:"relative"},r);this.props.preserveStackingContext||(A.opacity=.99);var C=(0,f.getCurrentSrcData)({fluid:a,fixed:o,returnArray:!0}),I=(0,f.getCurrentSrcData)({fluid:a,fixed:o})||{};if(a||o)o&&(A.width=r.width||C.width,A.height=r.height||C.height,A.display="inline-block","inherit"===r.display&&delete A.display);else{if(!p)return null;I.srcSet=""}var k=(0,g.switchImageSettings)({image:C,bgImage:this.bgImage,imageRef:this.imageRef,state:this.state});this.bgImage=k.nextImageArray||k.nextImage||this.bgImage;var Z=(0,y.createPseudoStyles)((0,i.default)({className:this.state.currentClassNames,transitionDelay:S,bgColor:x,backgroundStyles:this.backgroundStyles,style:r,fadeIn:w},k,{originalData:a||o})),O=(0,y.createNoScriptStyles)({image:C,bgColor:x,className:this.state.currentClassNames,backgroundStyles:this.backgroundStyles,style:r}),_=(a?"fluid":"")+(o?"fixed":"")+"-"+JSON.stringify(I.srcSet),P=(0,i.default)({},this.backgroundStyles,A);return l.default.createElement(d,(0,i.default)({className:this.state.currentClassNames,style:P,ref:this.handleRef,key:_},b),l.default.createElement("style",{dangerouslySetInnerHTML:{__html:Z}}),this.state.hasNoScript&&l.default.createElement("noscript",null,l.default.createElement("style",{dangerouslySetInnerHTML:{__html:O}})),m)},t}(l.default.Component);x.defaultProps={critical:!1,fadeIn:!0,durationFadeIn:500,Tag:"div",preserveStackingContext:!1,rootMargin:"200px",keepStatic:!1};var w=c.default.shape({width:c.default.number.isRequired,height:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,srcAvif:c.default.string,srcSetAvif:c.default.string,media:c.default.string}),S=c.default.shape({aspectRatio:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,sizes:c.default.string,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,srcAvif:c.default.string,srcSetAvif:c.default.string,media:c.default.string});x.propTypes={fixed:c.default.oneOfType([w,c.default.arrayOf(w),c.default.arrayOf(c.default.oneOfType([w,c.default.string]))]),fluid:c.default.oneOfType([S,c.default.arrayOf(S),c.default.arrayOf(c.default.oneOfType([S,c.default.string]))]),fadeIn:c.default.oneOfType([c.default.string,c.default.bool]),durationFadeIn:c.default.number,className:c.default.oneOfType([c.default.string,c.default.object]),critical:c.default.bool,crossOrigin:c.default.oneOfType([c.default.string,c.default.bool]),style:c.default.oneOfType([c.default.object,c.default.array]),backgroundColor:c.default.oneOfType([c.default.string,c.default.bool]),onLoad:c.default.func,onError:c.default.func,onStartLoad:c.default.func,Tag:c.default.oneOfType([c.default.string,c.default.func]),preserveStackingContext:c.default.bool,rootMargin:c.default.string,keepStatic:c.default.bool};var A=x;t.Z=A},3008:function(e,t,r){"use strict";t.__esModule=!0,t.default=t.getBackgroundStylesForSingleClass=t.getStyleRules=t.getStyleRulesForClassName=void 0;var a=r(7257),n=function(e){for(var t=(0,a.isBrowser)()?window.document.styleSheets:[],r=0;r0&&void 0!==e[0].style)switch(e[0].style.constructor.name||e[0].style.constructor.toString()){case"CSS2Properties":case"[object MSStyleCSSProperties]":Object.values(e[0].style).forEach((function(r){t[(0,a.toCamelCase)(r)]=e[0].style[r]}));break;case"CSSStyleDeclaration":t=e[0].style;break;default:console.error("Unknown style object prototype")}return t};t.getStyleRules=i;var o=function(e){if(e&&(0,a.isString)(e)){var t=n("."+e);if((null==t?void 0:t.length)>0&&void 0!==t[0].style)return Object.keys(i(t)).filter((function(e){return 0===e.indexOf("background")&&""!==t[0].style[e]})).reduce((function(e,r){return e[(0,a.toCamelCase)(r)]=t[0].style[r],e}),{})}return{}};t.getBackgroundStylesForSingleClass=o;var s=function(e){if((0,a.isBrowser)()){var t=(0,a.stringToArray)(e);if(t instanceof Array){var r=[];return t.forEach((function(e){return r.push(o(e))})),Object.assign.apply(Object,r)}return o(e)}return{}};t.default=s},471:function(e,t){"use strict";t.__esModule=!0,t.resetComponentClassCache=t.activateCacheForComponentClass=t.inComponentClassCache=void 0;var r=Object.create({});t.inComponentClassCache=function(e){return r[e]||!1};t.activateCacheForComponentClass=function(e){e&&(r[e]=!0)};t.resetComponentClassCache=function(){for(var e in r)delete r[e]}},9827:function(e,t,r){"use strict";var a=r(4859);t.__esModule=!0,t.convertProps=t.stripRemainingProps=void 0;var n=a(r(8527)),i=a(r(9315)),o=r(1135);t.stripRemainingProps=function(e){return(0,i.default)(e)};t.convertProps=function(e){var t=(0,n.default)({},e),r=t.fixed;return t.fluid&&(0,o.hasArtDirectionSupport)(e,"fluid")&&(t.fluid=(0,o.groupByMedia)(t.fluid)),r&&(0,o.hasArtDirectionSupport)(e,"fixed")&&(t.fixed=(0,o.groupByMedia)(t.fixed)),t}},2038:function(e,t,r){"use strict";t.__esModule=!0,t.resetImageCache=t.activateCacheForMultipleImages=t.activateCacheForImage=t.allInImageCache=t.inImageCache=void 0;var a=r(9827),n=r(1135),i=r(3441),o=r(7257),s=Object.create({}),l=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=!1);var l=(0,a.convertProps)(e),d=(0,i.hasImageArray)(l)&&!(0,n.hasArtDirectionArray)(l);if(d&&!r)return c(e);var u=d?(0,i.getSelectedImage)(l,t):(0,i.getImageSrcKey)(l);if((0,o.isObject)(u)){var f=(0,i.getImageSrcKey)({fluid:u,fixed:u});return s[f]||!1}return s[u]||!1};t.inImageCache=l;var c=function(e){var t=(0,a.convertProps)(e);return(t.fluid||t.fixed).every((function(e,r){return l(t,r,!0)}))};t.allInImageCache=c;var d=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=!1);var l=(0,a.convertProps)(e),c=(0,i.hasImageArray)(l)&&!(0,n.hasArtDirectionArray)(l);if(c&&!r)return u(e);var d=c?(0,i.getSelectedImage)(l,t):(0,i.getImageSrcKey)(l);if(d)if((0,o.isObject)(d)){var f=(0,i.getImageSrcKey)({fluid:d,fixed:d});s[f]=!0}else s[d]=!0};t.activateCacheForImage=d;var u=function(e){var t=(0,a.convertProps)(e);(t.fluid||t.fixed).forEach((function(e,r){return d(t,r,!0)}))};t.activateCacheForMultipleImages=u;t.resetImageCache=function(){for(var e in s)delete s[e]}},4583:function(e,t,r){"use strict";t.__esModule=!0,t.switchImageSettings=void 0;var a=r(3441),n=r(1135),i=r(7257);t.switchImageSettings=function(e){var t,r,o=e.image,s=e.bgImage,l=e.imageRef,c=e.state,d=(0,a.getCurrentFromData)({data:l,propName:"currentSrc"}),u=Array.isArray(o)&&!(0,n.hasArtDirectionArray)({fluid:o}),f=Array.isArray(s)?(0,i.filteredJoin)(s):s,m=u&&c.seenBefore&&!!d;if(u){d||(t=(0,a.getCurrentFromData)({data:o,propName:"tracedSVG",returnArray:u}),t=(0,i.combineArray)((0,a.getCurrentFromData)({data:o,propName:"base64",returnArray:u}),t)),t=(0,i.combineArray)((0,a.getCurrentFromData)({data:o,propName:"CSS_STRING",addUrl:!1,returnArray:u}),t),(c.imgLoaded||d)&&c.isVisible&&(d?(t=(0,i.combineArray)((0,a.getCurrentFromData)({data:l,propName:"currentSrc",returnArray:u}),t),m=!0):(t=(0,i.combineArray)((0,a.getCurrentFromData)({data:l,propName:"src",returnArray:u}),t),m=!0)),t=(0,i.combineArray)(t,s);var p=(0,a.createDummyImageArray)(o.length);r=t=(0,i.combineArray)(t,p),t=(0,i.filteredJoin)(t)}else t="",t=(0,a.getCurrentFromData)({data:o,propName:"tracedSVG"})||(0,a.getCurrentFromData)({data:o,propName:"base64"}),c.imgLoaded&&c.isVisible&&(t=d,m=!0);var g=c.imageState%2;!u&&""===t&&c.imgLoaded&&c.isVisible&&l&&!l.currentSrc&&(t=(0,a.getCurrentFromData)({data:l,propName:"src",checkLoaded:!1}),m=!0),t||(t=f);var h={lastImage:f,nextImage:t,afterOpacity:g,finalImage:m};return r&&(h.nextImageArray=r),h}},2029:function(e,t,r){"use strict";t.__esModule=!0,t.imageReferenceCompleted=t.hasPictureRef=t.hasActivatedPictureRefs=t.activateMultiplePictureRefs=t.activatePictureRef=t.createMultiplePictureRefs=t.createPictureRef=void 0;var a=r(9827),n=r(3441),i=r(1135),o=r(7257),s=r(2038),l=function(e,t,r,s){void 0===s&&(s=!1);var l=(0,a.convertProps)(e);if((0,o.isBrowser)()&&(void 0!==l.fluid||void 0!==l.fixed)){if((0,n.hasImageArray)(l)&&!(0,i.hasArtDirectionArray)(l)&&!s)return c(e,t);var u=new Image;return u.onload=function(){return t()},u.complete||"function"!=typeof l.onLoad||u.addEventListener("load",l.onLoad),"function"==typeof l.onError&&u.addEventListener("error",l.onError),l.crossOrigin&&(u.crossOrigin=l.crossOrigin),!l.critical&&!l.isVisible||s?u:d(u,l,r,s)}return null};t.createPictureRef=l;var c=function(e,t){var r=(0,a.convertProps)(e),n=(r.fluid||r.fixed).map((function(e,a){return l(r,t,a,!0)}));return r.critical||r.isVisible?d(n,r):n};t.createMultiplePictureRefs=c;var d=function(e,t,r,s,l){void 0===r&&(r=null),void 0===s&&(s=0),void 0===l&&(l=!1);var c=(0,a.convertProps)(t);if((0,o.isBrowser)()&&(void 0!==c.fluid||void 0!==c.fixed)){var d=(0,n.hasImageArray)(c)&&!(0,i.hasArtDirectionArray)(c);if(d&&!l)return u(e,t,r);var f=document.createElement("body"),m=d?(0,n.getSelectedImage)(c,s):(0,n.getCurrentSrcData)(c);if(!m)return null;if((0,o.isString)(m))return m;if(r&&(e.width=r.offsetWidth,e.height=r.offsetHeight),(0,n.hasPictureElement)()){var p=document.createElement("picture");if(r&&(p.width=e.width,p.height=e.height),(0,i.hasArtDirectionArray)(c))(0,i.createArtDirectionSources)(c).reverse().forEach((function(e){return p.appendChild(e)}));var g=(0,i.createSourceElementForSrcSet)(m,"avif");g&&p.appendChild(g);var h=(0,i.createSourceElementForSrcSet)(m,"webp");h&&p.appendChild(h),p.appendChild(e),f.appendChild(p)}return e.sizes=m.sizes||"",e.srcset=m.srcSet||"",e.src=m.src||"",e}return null};t.activatePictureRef=d;var u=function(e,t,r){return e.map((function(e,a){return d(e,t,r,a,!0)}))};t.activateMultiplePictureRefs=u;t.hasActivatedPictureRefs=function(e){return Array.isArray(e)?e.every((function(e){return f(e)})):f(e)};var f=function(e){return(0,o.isString)(e)||!!e&&!!e.currentSrc};t.hasPictureRef=f;t.imageReferenceCompleted=function(e,t){return e?Array.isArray(e)?e.every((function(e){return(0,n.imageLoaded)(e)}))||(0,s.inImageCache)(t):(0,n.imageLoaded)(e)||(0,s.inImageCache)(t):(0,o.isString)(e)}},3441:function(e,t,r){"use strict";t.__esModule=!0,t.imageLoaded=t.createDummyImageArray=t.imageArrayPropsChanged=t.imagePropsChanged=t.hasImageUrl=t.isBase64=t.getUrlString=t.getSelectedImage=t.getCurrentSrcData=t.getImageSrcKey=t.getCurrentFromData=t.hasImageArray=t.hasPictureElement=void 0;var a=r(1135),n=r(7257);t.hasPictureElement=function(){return"undefined"!=typeof HTMLPictureElement||(0,n.isBrowser)()};var i=function(e){return Boolean(e.fluid&&Array.isArray(e.fluid)||e.fixed&&Array.isArray(e.fixed))};t.hasImageArray=i;t.getCurrentFromData=function(e){var t=e.data,r=e.propName,i=e.addUrl,l=void 0===i||i,c=e.returnArray,d=void 0!==c&&c,f=e.checkLoaded,m=void 0===f||f;if(!t||!r)return"";var p="tracedSVG"===r;if(Array.isArray(t)&&!(0,a.hasArtDirectionArray)({fluid:t})){var g=t.map((function(e){return"currentSrc"===r||"src"===r?m?u(e)&&e[r]||"":e[r]:"CSS_STRING"===r&&(0,n.isString)(e)||(0,n.isString)(e)?e:e&&r in e?e[r]:""}));return s({imageString:g,tracedSVG:p,addUrl:l,returnArray:d})}if((0,a.hasArtDirectionArray)({fluid:t})&&("currentSrc"===r||"src"===r||"base64"===r||p)){var h=o({fluid:t});return r in h?s({imageString:h[r],tracedSVG:p,addUrl:l}):""}return"object"!=typeof t?"":"currentSrc"!==r&&"src"!==r||!(r in t)?r in t?s({imageString:t[r],tracedSVG:p,addUrl:l}):"":s({imageString:m?u(t)&&t[r]||"":t[r],addUrl:l})};t.getImageSrcKey=function(e){var t=e.fluid,r=e.fixed,a=o({fluid:t,fixed:r});return a&&a.src||null};var o=function(e,t){var r=e.fluid,o=e.fixed,s=e.returnArray;void 0===t&&(t=0);var l=r||o;if(i({fluid:r,fixed:o})){if(s)return l;if((0,n.isBrowser)()&&(0,a.hasArtDirectionArray)({fluid:r,fixed:o})){var c=l.slice().reverse(),d=c.findIndex(a.matchesMedia);if(-1!==d)return c[d]}return l[t]}return l};t.getCurrentSrcData=o;t.getSelectedImage=function(e,t){var r=e.fluid,a=e.fixed;void 0===t&&(t=0);var n=r||a;return i({fluid:r,fixed:a})?n[t]||n[0]:n};var s=function(e){var t=e.imageString,r=e.tracedSVG,a=void 0!==r&&r,i=e.addUrl,o=void 0===i||i,s=e.returnArray,d=void 0!==s&&s,u=e.hasImageUrls,f=void 0!==u&&u;if(Array.isArray(t)){var m=t.map((function(e){if(e){var t=l(e),r=f||c(e),n=e&&a?'"'+e+'"':e&&!t&&!a&&r?"'"+e+"'":e;return o&&e?"url("+n+")":n}return e}));return d?m:(0,n.filteredJoin)(m)}var p=l(t),g=f||c(t),h=t&&a?'"'+t+'"':t&&!p&&!a&&g?"'"+t+"'":t;return t?o?"url("+h+")":h:""};t.getUrlString=s;var l=function(e){return(0,n.isString)(e)&&-1!==e.indexOf("base64")};t.isBase64=l;var c=function(e){return(0,n.isString)(e)&&"http"===e.substr(0,4)};t.hasImageUrl=c;t.imagePropsChanged=function(e,t){return e.fluid&&!t.fluid||e.fixed&&!t.fixed||d(e,t)||e.fluid&&t.fluid&&e.fluid.src!==t.fluid.src||e.fixed&&t.fixed&&e.fixed.src!==t.fixed.src};var d=function(e,t){var r=Array.isArray(e.fluid),a=Array.isArray(t.fluid),n=Array.isArray(e.fixed),i=Array.isArray(t.fixed);return!!(r&&!a||n&&!i||!r&&a||!n&&i)||(r&&a?e.fluid.length!==t.fluid.length||e.fluid.some((function(e,r){return e.src!==t.fluid[r].src})):n&&i?e.fixed.length!==t.fixed.length||e.fixed.some((function(e,r){return e.src!==t.fixed[r].src})):void 0)};t.imageArrayPropsChanged=d;t.createDummyImageArray=function(e){var t=s({imageString:"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="});return Array(e).fill(t)};var u=function(e){return!!e&&((0,n.isString)(e)||e.complete&&0!==e.naturalWidth&&0!==e.naturalHeight)};t.imageLoaded=u},1141:function(e,t,r){"use strict";t.__esModule=!0,t.listenToIntersections=t.getIO=t.callbackIO=void 0;var a,n=r(7257),i=new WeakMap,o=function(e){e.forEach((function(e){if(i.has(e.target)){var t=i.get(e.target);(e.isIntersecting||e.intersectionRatio>0)&&(a.unobserve(e.target),i.delete(e.target),t())}}))};t.callbackIO=o;var s=function(e){return void 0===a&&(0,n.isBrowser)()&&window.IntersectionObserver&&(a=new window.IntersectionObserver(o,{rootMargin:e})),a};t.getIO=s;t.listenToIntersections=function(e,t,r){void 0===r&&(r="200px");var a=s(r);return a?(a.observe(e),i.set(e,t),function(){a.unobserve(e),i.delete(e)}):function(){}}},1135:function(e,t,r){"use strict";var a=r(4859);t.__esModule=!0,t.matchesMedia=t.hasArtDirectionArray=t.hasArtDirectionSupport=t.createArtDirectionSources=t.createSourceElementForSrcSet=t.groupByMedia=void 0;var n=a(r(5221)),i=r(7257);t.groupByMedia=function(e){var t=[],r=(0,n.default)(e,"media");return r.forEach((function(e){return!e.media&&t.push(e)})),t.length,r};var o=function(e,t){var r=document.createElement("source"),a="srcSet"+(0,i.capitalize)(t);return a in e&&(r.type="image/"+t,r.srcset=e[a]),e.sizes&&(r.sizes=e.sizes),e.media&&(r.media=e.media),r.srcset?r:null};t.createSourceElementForSrcSet=o;t.createArtDirectionSources=function(e){var t=e.fluid,r=e.fixed;return(t||r).reduce((function(e,t){if(!t.media)return e;var r=o(t,"webp"),a=o(t,"avif");return r&&e.push(r),a&&e.push(a),e}),[])};var s=function(e,t){return e[t]&&Array.isArray(e[t])&&e[t].some((function(e){return!!e&&void 0!==e.media}))};t.hasArtDirectionSupport=s;t.hasArtDirectionArray=function(e){return s(e,"fluid")||s(e,"fixed")};t.matchesMedia=function(e){var t=e.media;return!!t&&((0,i.isBrowser)()&&void 0!==window.matchMedia&&!!window.matchMedia(t).matches)}},7257:function(e,t){"use strict";t.__esModule=!0,t.combineArray=t.filteredJoin=t.hashString=t.stringToArray=t.capitalize=t.toKebabCase=t.toCamelCase=t.isObject=t.isString=t.isBrowser=void 0;t.isBrowser=function(){return"undefined"!=typeof window&&void 0!==window.document};var r=function(e){return"[object String]"===Object.prototype.toString.call(e)};t.isString=r;t.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)};t.toCamelCase=function(e){return r(e)&&-1!==e.indexOf("-")&&e.toLowerCase().replace(/(?:^\w|-|[A-Z]|\b\w)/g,(function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()})).replace(/\s|\W+/g,"")||e};t.toKebabCase=function(e){return r(e)&&e.replace(/\s|\W+/g,"").replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()}))};t.capitalize=function(e){return(null==e?void 0:e.charAt(0).toUpperCase())+e.slice(1)};t.stringToArray=function(e,t){return void 0===t&&(t=" "),e instanceof Array?e:!!r(e)&&(e.includes(t)?e.split(t):[e])};t.hashString=function(e){return r(e)&&[].reduce.call(e,(function(e,t){return 0|(e=(e<<5)-e+t.charCodeAt(0))}),0)};t.filteredJoin=function(e){return e.filter((function(e){return""!==e})).join()};t.combineArray=function(e,t){return Array.isArray(e)?e.map((function(e,r){return e||t&&t[r]})):[e]}},8676:function(e,t,r){"use strict";var a=r(4859);t.__esModule=!0,t.createNoScriptStyles=t.createStyleImage=t.createPseudoStyles=t.createPseudoElementMediaQuery=t.createPseudoElementWithContent=t.createPseudoElement=void 0;var n=a(r(8527)),i=r(6675),o=r(3441),s=r(1135),l=r(7257),c=function(e,t){void 0===t&&(t=":before");var r=(0,i.escapeClassNames)(e),a=(0,l.stringToArray)(r),n="";return Array.isArray(a)&&(a=a.filter((function(e){return""!==e}))).length>0&&(n="."+a.join(".")+t),n};t.createPseudoElement=c;var d=function(e,t){return"\n "+e+" {\n opacity: 1;\n background-image: "+t+";\n }"};t.createPseudoElementWithContent=d;var u=function(e,t,r,a){return"\n @media "+t+" {\n "+d(e,r)+"\n }\n "+(a&&"@media "+t+" {\n "+d(e,a)+"\n }")+"\n "};t.createPseudoElementMediaQuery=u;t.createPseudoStyles=function(e){var t=e.className,r=e.transitionDelay,a=e.lastImage,o=e.nextImage,s=e.afterOpacity,l=e.bgColor,d=e.fadeIn,u=e.backgroundStyles,m=e.style,p=e.finalImage,g=e.originalData,h=c(t),y=c(t,":after"),v=(0,n.default)({},u,m);return"\n "+h+",\n "+y+" {\n content: '';\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n "+(l&&"background-color: "+l+";")+"\n "+(0,i.setTransitionStyles)(r,d)+"\n "+(0,i.kebabifyBackgroundStyles)(v)+"\n }\n "+h+" {\n z-index: -100;\n "+((!s||p)&&f(o,g)||"")+"\n "+(s&&a&&f(a,g)||"")+"\n opacity: "+Number(!s)+"; \n }\n "+y+" {\n z-index: -101;\n "+((s||p)&&f(o,g)||"")+"\n "+(!s&&a&&f(a,g)||"")+"\n "+(p?"opacity: "+Number(s)+";":"")+"\n }\n "};var f=function(e,t){var r=(0,o.hasImageArray)({fluid:t})&&!(0,s.hasArtDirectionArray)({fluid:t});return((0,l.isBrowser)()||r)&&e?"background-image: "+e+";":""};t.createStyleImage=f;t.createNoScriptStyles=function(e){var t=e.className,r=e.image;if(r){var a=Array.isArray(r)&&!(0,s.hasArtDirectionArray)({fluid:r}),n=(0,o.getCurrentFromData)({data:r,propName:"src",checkLoaded:!1,addUrl:!1,returnArray:a}),i=(0,o.getUrlString)({imageString:n,hasImageUrls:!0,returnArray:a}),f="";if(a){var m=(0,o.getCurrentFromData)({data:r,propName:"CSS_STRING",addUrl:!1,returnArray:a});f=(0,l.filteredJoin)((0,l.combineArray)(i,m))}var p=c(t);return(0,s.hasArtDirectionArray)({fluid:r})?r.map((function(e){var t=(0,o.getUrlString)({imageString:e.src}),r=(0,o.getUrlString)({imageString:e.srcWebp||""});return e.media?u(p,e.media,t,r):u(p,"screen",t,r)})).join(""):d(p,f||i)}return""}},6675:function(e,t,r){"use strict";var a=r(4859);t.__esModule=!0,t.presetBackgroundStyles=t.fixOpacity=t.setTransitionStyles=t.kebabifyBackgroundStyles=t.escapeClassNames=t.fixClassName=void 0;var n=a(r(8527)),i=a(r(8834)),o=a(r(6269)),s=r(9827),l=r(471),c=r(3441),d=r(7257);t.fixClassName=function(e){var t=e.className,r=(0,i.default)(e,["className"]),a=(0,s.convertProps)(r),n=(0,l.inComponentClassCache)(t),u=(0,c.getCurrentSrcData)(a),f=o.default.generate(),m=" gbi-"+(0,d.hashString)(u&&u.srcSet||t||"noclass")+"-"+f,p=(""+(t||"")+((n||!t?m:"")||"")).trim();return n||(0,l.activateCacheForComponentClass)(t),[p]};t.escapeClassNames=function(e){if(e){var t=(0,d.isBrowser)()&&window._gbiSpecialChars?window._gbiSpecialChars:"undefined"!=typeof __GBI_SPECIAL_CHARS__?__GBI_SPECIAL_CHARS__:":/",r=new RegExp("["+t+"]","g");return e.replace(r,"\\$&")}return e};t.kebabifyBackgroundStyles=function(e){return(0,d.isString)(e)?e:e instanceof Object?Object.keys(e).filter((function(t){return 0===t.indexOf("background")&&""!==e[t]})).reduce((function(t,r){return""+t+(0,d.toKebabCase)(r)+": "+e[r]+";\n"}),""):""};t.setTransitionStyles=function(e,t){return void 0===e&&(e="0.25s"),void 0===t&&(t=!0),t?"transition: opacity 0.5s ease "+e+";":"transition: none;"};t.fixOpacity=function(e){var t=(0,n.default)({},e);if(!t.preserveStackingContext)try{t.style&&t.style.opacity&&(isNaN(t.style.opacity)||t.style.opacity>.99)&&(t.style.opacity=.99)}catch(r){}return t};t.presetBackgroundStyles=function(e){return(0,n.default)({},{backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"},e)}}}]); +//# sourceMappingURL=component---src-pages-index-tsx-dc693e317fbf62305a31.js.map \ No newline at end of file diff --git a/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js.LICENSE.txt b/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js.LICENSE.txt new file mode 100644 index 0000000..70b1be6 --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js.LICENSE.txt @@ -0,0 +1,4 @@ +/*! + * html-attributes + * https://github.com/alexmingoia/html-attributes + */ diff --git a/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js.map b/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js.map new file mode 100644 index 0000000..a36f59f --- /dev/null +++ b/js/packages/metaplex/public/component---src-pages-index-tsx-dc693e317fbf62305a31.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://metaplex/../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/defineProperty.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/iterableToArray.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/any-base/index.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/any-base/src/converter.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/filter-invalid-dom-props/dist/index.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/html-attributes/lib/html-attributes.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/short-uuid/index.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/short-uuid/node_modules/uuid/dist/esm-browser/rng.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/short-uuid/node_modules/uuid/dist/esm-browser/regex.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/short-uuid/node_modules/uuid/dist/esm-browser/stringify.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/short-uuid/node_modules/uuid/dist/esm-browser/validate.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/short-uuid/node_modules/uuid/dist/esm-browser/v4.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/sort-media-queries/lib/index.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/xtend/immutable.js","webpack://metaplex/./src/components/BaseButton.tsx","webpack://metaplex/./src/components/MetaPurpleButton.tsx","webpack://metaplex/./src/components/firstSection/index.tsx","webpack://metaplex/./src/components/citeSection/index.tsx","webpack://metaplex/./src/components/welcomeSection/index.tsx","webpack://metaplex/./src/components/SectionDisplayWrapper.tsx","webpack://metaplex/./src/components/multiSection/SectionDisplay.tsx","webpack://metaplex/./src/components/multiSection/SingleSection.tsx","webpack://metaplex/./src/components/multiSection/index.tsx","webpack://metaplex/../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://metaplex/../node_modules/babel-loader/lib/node_modules/gbimage-bridge/dist/index.modern.js","webpack://metaplex/../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://metaplex/./src/components/footerSection/index.tsx","webpack://metaplex/./src/pages/index.tsx","webpack://metaplex/../node_modules/gatsby-background-image/index.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/BackgroundUtils.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/ClassCache.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/HelperUtils.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/ImageCache.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/ImageHandling.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/ImageRef.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/ImageUtils.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/IntersectionObserverUtils.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/MediaUtils.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/SimpleUtils.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/StyleCreation.js","webpack://metaplex/../node_modules/gatsby-background-image/lib/StyleUtils.js"],"names":["module","exports","arr","len","length","i","arr2","Array","__esModule","arrayLikeToArray","isArray","obj","key","value","Object","defineProperty","enumerable","configurable","writable","iter","Symbol","iterator","from","TypeError","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","o","minLen","n","prototype","toString","call","slice","constructor","name","test","Converter","anyBase","srcAlphabet","dstAlphabet","converter","number","convert","BIN","OCT","DEC","HEX","Error","this","divide","newlen","numberMap","fromBase","toBase","result","isValid","indexOf","parseInt","concat","default","props","domProps","prop","hasOwnProperty","isValidDOMProp","_htmlAttributes","_htmlAttributes2","eventProps","onCopy","onCut","onPaste","onLoad","onError","onWheel","onScroll","onCompositionEnd","onCompositionStart","onCompositionUpdate","onKeyDown","onKeyPress","onKeyUp","onFocus","onBlur","onChange","onInput","onSubmit","onClick","onContextMenu","onDoubleClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onSelect","onTouchCancel","onTouchEnd","onTouchMove","onTouchStart","onAnimationStart","onAnimationEnd","onAnimationIteration","onTransitionEnd","_toConsumableArray","_defineProperty","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread","target","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","toFlickr","makeConvertor","uuidV4","flickrBase58","baseOptions","consistentLength","shortenUUID","longId","translator","paddingParams","translated","toLowerCase","replace","padStart","shortIdLength","paddingChar","toAlphabet","options","useAlphabet","selectedOptions","Set","alphabetLength","Math","ceil","log","pow","fromHex","toHex","generate","new","uuid","fromUUID","toUUID","shortUuid","shortId","m","match","join","enlargeUUID","alphabet","maxLength","freeze","constants","cookieBase90","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","byteToHex","substr","offset","undefined","buf","rnds","random","extend","mqTypes","determineSortOrder","isMax","a","b","sortValA","sortVal","sortValB","ruleA","item","__media","ruleB","sortInit","rules","type","flag","rulesLength","itemsValid","allValid","collection","mqCollection","mqTypesLength","createCollection","prepareRules","rule","collectionType","valMatch","addRulesToCollection","sorter","sort","sortCollection","transformed","iterateCollectionItem","collectionItem","resultVal","typeLength","transformCollection","BaseButton","OuterSectionWrapper","SectionWrapper","ContainerLeft","ContainerRight","ButtonWrapper","heroImgStyle","boxShadow","maxWidth","marginLeft","useStaticQuery","hero","heroImg","heroImgData","getImage","frontmatter","title","rawMarkdownBody","G","className","image","loading","alt","style","EventSectionWrapper","Container","InnerWrapper","Author","AuthorDesc","RacImage","GatsbyImage","cite","racImage","racImageData","id","summary","OuterContainer","InnerContainer","DropWrapper","Drop","DropImage","DropImageCryptoKickers","DropText","welcome","onoImage","ckImage","sdImage","subtitle","drop1","drop2","drop3","onoImageData","ckImageData","sdImageData","href","display","displayImage","dangerouslySetInnerHTML","__html","SectionOuterWrapper","backgroundColor","SectionWrapperLeft","SectionWrapperRight","ContainerText","ContainerDisplay","RoundedSectionDisplay","SectionDisplay","SectionBgGradient","SectionBgColor","SectionBgDark","ContainerSwitch","imageWrapper","position","background","html","whichDisplay","multipleSections","map","currentDisplay","_slicedToArray","_i","_s","_e","_arr","_n","_d","next","done","err","l","assign","e","r","t","layout","s","images","sources","reduce","split","charAt","toUpperCase","u","srcSet","_l","matchAll","_t","sizes","includes","c","_r","_t2","width","height","_c","placeholder","fallback","base64","tracedSVG","_o","aspectRatio","d","_ref2","_i2","_u2","media","_r2","_u","f","children","BgImage","footer","footerBg","footerBgData","button","Layout","isHome","Header","_interopRequireDefault","require","_objectWithoutPropertiesLoose2","_extends2","_assertThisInitialized2","_inheritsLoose2","_react","_propTypes","_BackgroundUtils","_HelperUtils","_ImageUtils","_ImageCache","_ImageRef","_ImageHandling","_StyleUtils","_StyleCreation","_IntersectionObserverUtils","_SimpleUtils","BackgroundImage","_React$Component","_this","intersectionListener","imageInCache","inImageCache","state","isVisible","onStartLoad","wasCached","imageRef","activatePictureRef","selfRef","setState","imageState","imgLoaded","imgCached","hasActivatedPictureRefs","convertedProps","convertProps","IOSupported","fadeIn","seenBefore","isBrowser","window","IntersectionObserver","critical","hasNoScript","currentClassNames","fixClassName","backgroundStyles","presetBackgroundStyles","handleImageLoaded","handleRef","createPictureRef","_proto","componentDidMount","imageReferenceCompleted","componentDidUpdate","prevProps","_this2","imagePropsChanged","bgImage","getCurrentFromData","data","propName","returnArray","componentWillUnmount","currentImageRef","isString","onload","cleanUpListeners","ref","listenToIntersections","rootMargin","activateCacheForImage","render","_fixOpacity","fixOpacity","preserveStackingContext","_fixOpacity$style","fluid","fixed","durationFadeIn","Tag","keepStatic","remainingProps","stripRemainingProps","bgColor","shouldFadeIn","transitionDelay","divStyle","opacity","getCurrentSrcData","noScriptImageData","newImageSettings","switchImageSettings","nextImageArray","nextImage","pseudoStyles","createPseudoStyles","originalData","noScriptPseudoStyles","createNoScriptStyles","componentKey","JSON","stringify","currentStyles","createElement","Component","defaultProps","fixedObject","shape","isRequired","src","string","srcWebp","srcSetWebp","srcAvif","srcSetAvif","fluidObject","propTypes","oneOfType","arrayOf","bool","crossOrigin","array","func","_default","getBackgroundStylesForSingleClass","getStyleRules","getStyleRulesForClassName","styleSheets","document","classes","cssRules","foundClass","foundAcc","styleRule","selectorText","cssStyleRules","styles","values","toCamelCase","console","error","newData","stringToArray","classObjects","resetComponentClassCache","activateCacheForComponentClass","inComponentClassCache","componentClassCache","create","_filterInvalidDomProps","_MediaUtils","hasArtDirectionSupport","groupByMedia","resetImageCache","activateCacheForMultipleImages","allInImageCache","imageCache","index","isLoop","isImageStack","hasImageArray","hasArtDirectionArray","getSelectedImage","getImageSrcKey","isObject","objectSrc","every","imageData","_ref","currentSources","lastImage","filteredJoin","finalImage","combineArray","addUrl","dummyArray","createDummyImageArray","afterOpacity","currentSrc","checkLoaded","hasPictureRef","activateMultiplePictureRefs","createMultiplePictureRefs","img","Image","complete","addEventListener","imageRefs","bodyClone","offsetWidth","offsetHeight","hasPictureElement","pic","createArtDirectionSources","reverse","currentSource","appendChild","sourcesAvif","createSourceElementForSrcSet","sourcesWebp","srcset","singleImageRef","imageLoaded","imageArrayPropsChanged","hasImageUrl","isBase64","getUrlString","HTMLPictureElement","Boolean","_ref$addUrl","_ref$returnArray","_ref$checkLoaded","imageString","dataElement","currentData","_ref3","mediaData","foundMedia","findIndex","matchesMedia","_ref4","_ref5","_ref5$tracedSVG","_ref5$addUrl","_ref5$returnArray","_ref5$hasImageUrls","hasImageUrls","stringArray","currentString","_base","_imageUrl","currentReturnString","imageUrl","returnString","base64String","isPropsFluidArray","isPrevPropsFluidArray","isPropsFixedArray","isPrevPropsFixedArray","some","dummyImageURI","fill","naturalWidth","naturalHeight","getIO","callbackIO","io","listeners","WeakMap","entries","entry","has","callback","get","isIntersecting","intersectionRatio","unobserve","delete","element","observer","observe","set","_sortMediaQueries","imageVariants","without","sortedVariants","variant","srcSetName","capitalize","sourceWebp","sourceAvif","matchMedia","matches","hashString","toKebabCase","str","letter","delimiter","hash","charCodeAt","arrayToJoin","fromArray","toArray","createStyleImage","createPseudoElementMediaQuery","createPseudoElementWithContent","createPseudoElement","appendix","escapedClassName","escapeClassNames","pseudoClasses","pseudoElementString","imageSource","imageSourceWebP","pseudoBefore","pseudoAfter","currentBackgroundStyles","setTransitionStyles","kebabifyBackgroundStyles","Number","hasStackedImages","allSources","sourcesAsUrl","sourcesAsUrlWithCSS","cssStrings","currentMedia","sourceString","webPString","_shortUuid","_ClassCache","elementExists","additionalClassname","randomClass","componentClassNames","trim","classNames","specialChars","_gbiSpecialChars","__GBI_SPECIAL_CHARS__","specialCharRegEx","RegExp","resultingStyles","styledProps","isNaN","backgroundPosition","backgroundRepeat","backgroundSize"],"mappings":";wFAUAA,EAAOC,QAVP,SAA2BC,EAAKC,IACnB,MAAPA,GAAeA,EAAMD,EAAIE,UAAQD,EAAMD,EAAIE,QAE/C,IAAK,IAAIC,EAAI,EAAGC,EAAO,IAAIC,MAAMJ,GAAME,EAAIF,EAAKE,IAC9CC,EAAKD,GAAKH,EAAIG,GAGhB,OAAOC,GAITN,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,qBCXxE,IAAIC,EAAmB,EAAQ,MAM/BT,EAAOC,QAJP,SAA4BC,GAC1B,GAAIK,MAAMG,QAAQR,GAAM,OAAOO,EAAiBP,IAIlDF,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,iBCQxER,EAAOC,QAfP,SAAyBU,EAAKC,EAAKC,GAYjC,OAXID,KAAOD,EACTG,OAAOC,eAAeJ,EAAKC,EAAK,CAC9BC,MAAOA,EACPG,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZP,EAAIC,GAAOC,EAGNF,GAITX,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,iBCZxER,EAAOC,QAJP,SAA0BkB,GACxB,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOZ,MAAMe,KAAKH,IAItHnB,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,iBCDxER,EAAOC,QAJP,WACE,MAAM,IAAIsB,UAAU,yIAItBvB,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,qBCLxE,IAAIgB,EAAoB,EAAQ,MAE5BC,EAAkB,EAAQ,MAE1BC,EAA6B,EAAQ,MAErCC,EAAoB,EAAQ,MAMhC3B,EAAOC,QAJP,SAA4BC,GAC1B,OAAOsB,EAAkBtB,IAAQuB,EAAgBvB,IAAQwB,EAA2BxB,IAAQyB,KAI9F3B,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,qBCbxE,IAAIC,EAAmB,EAAQ,MAW/BT,EAAOC,QATP,SAAqC2B,EAAGC,GACtC,GAAKD,EAAL,CACA,GAAiB,iBAANA,EAAgB,OAAOnB,EAAiBmB,EAAGC,GACtD,IAAIC,EAAIhB,OAAOiB,UAAUC,SAASC,KAAKL,GAAGM,MAAM,GAAI,GAEpD,MADU,WAANJ,GAAkBF,EAAEO,cAAaL,EAAIF,EAAEO,YAAYC,MAC7C,QAANN,GAAqB,QAANA,EAAoBvB,MAAMe,KAAKM,GACxC,cAANE,GAAqB,2CAA2CO,KAAKP,GAAWrB,EAAiBmB,EAAGC,QAAxG,IAIF7B,EAAOC,QAAP,QAA4BD,EAAOC,QAASD,EAAOC,QAAQO,YAAa,G,qBCZxE,IAAI8B,EAAY,EAAQ,MAWxB,SAASC,EAAQC,EAAaC,GAC5B,IAAIC,EAAY,IAAIJ,EAAUE,EAAaC,GAS3C,OAAO,SAAUE,GACf,OAAOD,EAAUE,QAAQD,IAK7BJ,EAAQM,IAAM,KACdN,EAAQO,IAAM,WACdP,EAAQQ,IAAM,aACdR,EAAQS,IAAM,mBACdhD,EAAOC,QAAUsC,G,8BCtBjB,SAASD,EAAUE,EAAaC,GAC9B,KAAKD,GAAgBC,GAAgBD,EAAYpC,QAAWqC,EAAYrC,QACtE,MAAM,IAAI6C,MAAM,gBAGlBC,KAAKV,YAAcA,EACnBU,KAAKT,YAAcA,EAWrBH,EAAUP,UAAUa,QAAU,SAAUD,GACtC,IAAItC,EACA8C,EACAC,EACAC,EAAY,GACZC,EAAWJ,KAAKV,YAAYpC,OAC5BmD,EAASL,KAAKT,YAAYrC,OAC1BA,EAASuC,EAAOvC,OAChBoD,EAA2B,iBAAXb,EAAsB,GAAK,GAE/C,IAAKO,KAAKO,QAAQd,GAChB,MAAM,IAAIM,MAAM,WAAaN,EAAS,wCAA0CO,KAAKV,YAAc,KAGrG,GAAIU,KAAKV,cAAgBU,KAAKT,YAC5B,OAAOE,EAGT,IAAKtC,EAAI,EAAGA,EAAID,EAAQC,IACtBgD,EAAUhD,GAAK6C,KAAKV,YAAYkB,QAAQf,EAAOtC,IAGjD,EAAG,CAID,IAHA8C,EAAS,EACTC,EAAS,EAEJ/C,EAAI,EAAGA,EAAID,EAAQC,KACtB8C,EAASA,EAASG,EAAWD,EAAUhD,KAEzBkD,GACZF,EAAUD,KAAYO,SAASR,EAASI,EAAQ,IAChDJ,GAAkBI,GACTH,EAAS,IAClBC,EAAUD,KAAY,GAI1BhD,EAASgD,EACTI,EAASN,KAAKT,YAAYP,MAAMiB,EAAQA,EAAS,GAAGS,OAAOJ,SACzC,IAAXJ,GAET,OAAOI,GAWTlB,EAAUP,UAAU0B,QAAU,SAAUd,GAGtC,IAFA,IAAItC,EAAI,EAEDA,EAAIsC,EAAOvC,SAAUC,EAC1B,IAA6C,IAAzC6C,KAAKV,YAAYkB,QAAQf,EAAOtC,IAClC,OAAO,EAIX,OAAO,GAGTL,EAAOC,QAAUqC,G,kCCxFjBxB,OAAOC,eAAed,EAAS,aAAc,CAC3CY,OAAO,IAETZ,EAAQ4D,QAgER,SAA+BC,GAC7B,IAAIC,EAAW,GAEf,IAAK,IAAIC,KAAQF,EACXA,EAAMG,eAAeD,IAASE,EAAeF,KAC/CD,EAASC,GAAQF,EAAME,IAI3B,OAAOD,GAvET,IAIgCpD,EAJ5BwD,EAAkB,EAAQ,MAE1BC,GAE4BzD,EAFcwD,IAG9BxD,EAAIH,WAAaG,EAAM,CACnCkD,QAASlD,GAIb,IAAI0D,EAAa,CACfC,QAAQ,EACRC,OAAO,EACPC,SAAS,EACTC,QAAQ,EACRC,SAAS,EACTC,SAAS,EACTC,UAAU,EACVC,kBAAkB,EAClBC,oBAAoB,EACpBC,qBAAqB,EACrBC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,SAAS,EACTC,eAAe,EACfC,eAAe,EACfC,QAAQ,EACRC,WAAW,EACXC,aAAa,EACbC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,aAAa,EACbC,QAAQ,EACRC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,YAAY,EACZC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,eAAe,EACfC,YAAY,EACZC,aAAa,EACbC,cAAc,EACdC,kBAAkB,EAClBC,gBAAgB,EAChBC,sBAAsB,EACtBC,iBAAiB,GAGnB,SAAShD,EAAeF,GACtB,OAAOK,EAAWL,IAASI,EAAiBP,QAAQG,IAAS,gBAAgB3B,KAAK2B,K,8BCzDpFhE,EAAOC,QAAU,CACf,KAAQ,OACR,OAAU,SACV,cAAiB,iBACjB,UAAa,YACb,OAAU,SACV,gBAAmB,kBACnB,kBAAqB,oBACrB,IAAO,MACP,MAAS,QACT,aAAgB,eAChB,UAAa,YACb,SAAY,WACZ,YAAe,cACf,YAAe,cACf,UAAa,YACb,QAAW,UACX,QAAW,UACX,KAAQ,OACR,MAAS,QACT,UAAa,QACb,KAAQ,OACR,QAAW,UACX,QAAW,UACX,QAAW,UACX,gBAAmB,kBACnB,YAAe,cACf,SAAY,WACZ,OAAU,SACV,YAAe,cACf,KAAQ,OACR,SAAY,WACZ,QAAW,UACX,MAAS,QACT,IAAO,MACP,SAAY,WACZ,SAAY,WACZ,UAAa,YACb,SAAY,WACZ,QAAW,UACX,IAAO,MACP,KAAQ,OACR,WAAc,aACd,YAAe,cACf,WAAc,aACd,eAAkB,iBAClB,WAAc,aACd,YAAe,cACf,QAAW,UACX,OAAU,SACV,OAAU,SACV,KAAQ,OACR,KAAQ,OACR,SAAY,WACZ,QAAW,MACX,UAAa,aACb,KAAQ,OACR,GAAM,KACN,UAAa,YACb,MAAS,QACT,OAAU,SACV,SAAY,WACZ,QAAW,UACX,UAAa,YACb,SAAY,WACZ,KAAQ,OACR,MAAS,QACT,KAAQ,OACR,KAAQ,OACR,KAAQ,OACR,SAAY,WACZ,IAAO,MACP,UAAa,YACb,MAAS,QACT,WAAc,aACd,OAAU,SACV,IAAO,MACP,UAAa,YACb,SAAY,WACZ,MAAS,QACT,KAAQ,OACR,WAAc,aACd,KAAQ,OACR,QAAW,UACX,QAAW,UACX,KAAQ,OACR,YAAe,cACf,OAAU,SACV,QAAW,UACX,WAAc,aACd,SAAY,WACZ,IAAO,MACP,SAAY,WACZ,KAAQ,OACR,KAAQ,OACR,QAAW,UACX,QAAW,UACX,MAAS,QACT,OAAU,SACV,UAAa,YACb,SAAY,WACZ,SAAY,WACZ,MAAS,QACT,KAAQ,OACR,MAAS,QACT,SAAY,WACZ,KAAQ,OACR,WAAc,aACd,IAAO,MACP,OAAU,SACV,OAAU,SACV,MAAS,QACT,KAAQ,OACR,MAAS,QACT,SAAY,WACZ,OAAU,SACV,MAAS,QACT,UAAa,YACb,KAAQ,OACR,cAAiB,gBACjB,OAAU,SACV,MAAS,QACT,MAAS,QACT,MAAS,QACT,KAAQ,S,qBCrIV,IAAIkH,EAAqB,EAAQ,MAE7BC,EAAkB,EAAQ,MAE9B,SAASC,EAAQC,EAAQC,GAAkB,IAAIC,EAAO1G,OAAO0G,KAAKF,GAAS,GAAIxG,OAAO2G,sBAAuB,CAAE,IAAIC,EAAU5G,OAAO2G,sBAAsBH,GAAaC,IAAkBG,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAO9G,OAAO+G,yBAAyBP,EAAQM,GAAK5G,eAAkBwG,EAAKM,KAAKC,MAAMP,EAAME,GAAY,OAAOF,EAElV,SAASQ,EAAcC,GAAU,IAAK,IAAI5H,EAAI,EAAGA,EAAI6H,UAAU9H,OAAQC,IAAK,CAAE,IAAI8H,EAAyB,MAAhBD,UAAU7H,GAAa6H,UAAU7H,GAAK,GAAQA,EAAI,EAAKgH,EAAQvG,OAAOqH,IAAS,GAAMC,SAAQ,SAAUxH,GAAOwG,EAAgBa,EAAQrH,EAAKuH,EAAOvH,OAAsBE,OAAOuH,0BAA6BvH,OAAOwH,iBAAiBL,EAAQnH,OAAOuH,0BAA0BF,IAAmBd,EAAQvG,OAAOqH,IAASC,SAAQ,SAAUxH,GAAOE,OAAOC,eAAekH,EAAQrH,EAAKE,OAAO+G,yBAAyBM,EAAQvH,OAAe,OAAOqH,EAM7gB,IAUIM,EA8CEC,EAxDFjG,EAAU,EAAQ,MAElBkG,EAAS,WAETC,EAAe,6DAEfC,EAAc,CAChBC,kBAAkB,GAYhBC,EAAc,SAAqBC,EAAQC,EAAYC,GACzD,IAAIC,EAAaF,EAAWD,EAAOI,cAAcC,QAAQ,KAAM,KAC/D,OAAKH,GAAkBA,EAAcJ,iBAC9BK,EAAWG,SAASJ,EAAcK,cAAeL,EAAcM,aADRL,GAwBhEjJ,EAAOC,UAWDuI,EAAgB,SAAuBe,EAAYC,GAErD,IAAIC,EAAcF,GAAcb,EAE5BgB,EAAkB1B,EAAcA,EAAc,GAAIW,GAAca,GAGpE,GAAIrC,EAAmB,IAAIwC,IAAIpJ,MAAMe,KAAKmI,KAAerJ,SAAWqJ,EAAYrJ,OAC9E,MAAM,IAAI6C,MAAM,kFAGlB,IA1B6C2G,EA0BzCP,GA1ByCO,EA0BRH,EAAYrJ,OAzB5CyJ,KAAKC,KAAKD,KAAKE,IAAIF,KAAKG,IAAI,EAAG,MAAQH,KAAKE,IAAIH,KA2BjDZ,EAAgB,CAClBK,cAAeA,EACfT,iBAAkBc,EAAgBd,iBAClCU,YAAaG,EAAY,IAGvBQ,EAAU1H,EAAQA,EAAQS,IAAKyG,GAC/BS,EAAQ3H,EAAQkH,EAAalH,EAAQS,KAErCmH,EAAW,WACb,OAAOtB,EAAYJ,IAAUwB,EAASjB,IAGpCD,EAAa,CACfqB,IAAKD,EACLA,SAAUA,EACVE,KAAM5B,EACN6B,SAAU,SAAkBD,GAC1B,OAAOxB,EAAYwB,EAAMJ,EAASjB,IAEpCuB,OAAQ,SAAgBC,GACtB,OA1DU,SAAqBC,EAAS1B,GAC9C,IAEI2B,EAFM3B,EAAW0B,GAASrB,SAAS,GAAI,KAE/BuB,MAAM,wCAElB,MAAO,CAACD,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAAIE,KAAK,KAqD9BC,CAAYL,EAAWN,IAEhCY,SAAUrB,EACVsB,UAAW1B,GAGb,OADAvI,OAAOkK,OAAOjC,GACPA,IAIKkC,UAAY,CACxBvC,aAAcA,EACdwC,aAjGe,8FAoGjB1C,EAAc6B,KAAO5B,EAErBD,EAAc2B,SAAW,WAMvB,OALK5B,IAEHA,EAAWC,EAAcE,GAAcyB,UAGlC5B,KAGFC,I,kCC7HT,IAAI2C,E,iCACJ,IAAIC,EAAQ,IAAIC,WAAW,IACZ,SAASC,IAEtB,IAAKH,KAGHA,EAAoC,oBAAXI,QAA0BA,OAAOJ,iBAAmBI,OAAOJ,gBAAgBK,KAAKD,SAA+B,oBAAbE,UAAgE,mBAA7BA,SAASN,iBAAkCM,SAASN,gBAAgBK,KAAKC,WAGrO,MAAM,IAAIxI,MAAM,4GAIpB,OAAOkI,EAAgBC,GCjBzB,4HCQA,ICFA,MAJA,SAAkBf,GAChB,MAAuB,iBAATA,GAAqB,OAAWA,IDG5CqB,EAAY,GAEPrL,EAAI,EAAGA,EAAI,MAAOA,EACzBqL,EAAU5D,MAAMzH,EAAI,KAAO2B,SAAS,IAAI2J,OAAO,IAoBjD,MAjBA,SAAmBzL,GACjB,IAAI0L,EAAS1D,UAAU9H,OAAS,QAAsByL,IAAjB3D,UAAU,GAAmBA,UAAU,GAAK,EAG7EmC,GAAQqB,EAAUxL,EAAI0L,EAAS,IAAMF,EAAUxL,EAAI0L,EAAS,IAAMF,EAAUxL,EAAI0L,EAAS,IAAMF,EAAUxL,EAAI0L,EAAS,IAAM,IAAMF,EAAUxL,EAAI0L,EAAS,IAAMF,EAAUxL,EAAI0L,EAAS,IAAM,IAAMF,EAAUxL,EAAI0L,EAAS,IAAMF,EAAUxL,EAAI0L,EAAS,IAAM,IAAMF,EAAUxL,EAAI0L,EAAS,IAAMF,EAAUxL,EAAI0L,EAAS,IAAM,IAAMF,EAAUxL,EAAI0L,EAAS,KAAOF,EAAUxL,EAAI0L,EAAS,KAAOF,EAAUxL,EAAI0L,EAAS,KAAOF,EAAUxL,EAAI0L,EAAS,KAAOF,EAAUxL,EAAI0L,EAAS,KAAOF,EAAUxL,EAAI0L,EAAS,MAAM1C,cAMzf,IAAK,EAASmB,GACZ,MAAM9I,UAAU,+BAGlB,OAAO8I,GEHT,MApBA,SAAYb,EAASsC,EAAKF,GAExB,IAAIG,GADJvC,EAAUA,GAAW,IACFwC,SAAWxC,EAAQ8B,KAAOA,KAK7C,GAHAS,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBD,EAAK,CACPF,EAASA,GAAU,EAEnB,IAAK,IAAIvL,EAAI,EAAGA,EAAI,KAAMA,EACxByL,EAAIF,EAASvL,GAAK0L,EAAK1L,GAGzB,OAAOyL,EAGT,OAAO,EAAUC,K,qBCpBnB,IAAIE,EAAS,EAAQ,MAEjBC,EAAU,CAAC,QAAS,MAAO,WAAY,YAAa,WAAY,YAAa,SA8EjF,SAASC,EAAmBC,GAS1B,OAAO,SAAUC,EAAGC,GAClB,IAAIC,EAAWF,EAAEG,QACbC,EAAWH,EAAEE,QACbE,EAAQL,EAAEM,KAAKC,QACfC,EAAQP,EAAEK,KAAKC,QAGnB,GAFAR,OAAyB,IAAVA,GAAwBA,EAEnCG,IAAaE,EAAU,CACzB,GAAIC,EAAM/B,MAAM,SAEd,OAAO,EAGT,GAAIkC,EAAMlC,MAAM,SAEd,OAAQ,EAKZ,OAAIyB,EACKK,EAAWF,EAIbA,EAAWE,GA0HtB,SAASK,EAASC,EAAOC,EAAMhJ,GAC7B,OA7MF,SAAkB+I,EAAOC,EAAMhJ,GAC7B,OAAK+I,GAAUA,EAAM3M,QAA2B,iBAAV2M,GAIzB,WAATC,GAAuBhJ,GAAwB,iBAATA,IA1B5C,SAAoB+I,EAAOC,EAAMhJ,GAG/B,IAFA,IAAIiJ,GAAO,EAEF5M,EAAI,EAAG6M,EAAcH,EAAM3M,OAAQC,EAAI6M,EAAa7M,IAC3D,UAAW0M,EAAM1M,KAAO2M,GAAQhJ,IAAS+I,EAAM1M,GAAG4D,eAAeD,GAAO,CACtEiJ,GAAO,EACP,MAIJ,OAAOA,EAgB0DE,CAAWJ,EAAOC,EAAMhJ,GAIlF,MAHE,OAJA,OA2MDoJ,CAASL,EAAOC,EAAMhJ,IAC5B,IAAK,OACH,MAAO,GAET,IAAK,OACH,OAAO+I,EAGX,IAAIM,EA3HN,WAGE,IAFA,IAAIC,EAAe,GAEVjN,EAAI,EAAGkN,EAAgBrB,EAAQ9L,OAAQC,EAAIkN,EAAelN,IACjEiN,EAAapB,EAAQ7L,IAAM,GAG7B,OAAOiN,EAoHUE,GAIjB,OAHAT,EAhMF,SAAsBA,EAAOC,EAAMhJ,GAIjC,IAHA,IAAIqJ,EAAa,GACbzL,EAAI,GAECvB,EAAI,EAAG6M,EAAcH,EAAM3M,OAAQC,EAAI6M,EAAa7M,IAC9C,WAAT2M,EACFpL,EAAIqK,EAAO,GAAI,CACbW,QAASG,EAAM1M,MAGjBuB,EAAIqK,EAAO,GAAIc,EAAM1M,KACnBuM,QAAUG,EAAM1M,GAAG2D,GAGvBqJ,EAAWvF,KAAKlG,GAGlB,OAAOyL,EA+KCI,CAAaV,EAAOC,EAAMhJ,GA3GpC,SAA8BqJ,EAAYN,GAExC,IAAK,IAAI1M,EAAI,EAAG6M,EAAcH,EAAM3M,OAAQC,EAAI6M,EAAa7M,IAAK,CAChE,IAAIsM,EAAOI,EAAM1M,GACbqN,EAAOf,EAAKC,QACZe,EAAiB,QACjBC,EAAWF,EAAK/C,MAAM,QAEtB+C,EAAK/C,MAAM,aACbgD,EAAiB,WACRD,EAAK/C,MAAM,cACpBgD,EAAiB,YACRD,EAAK/C,MAAM,aACpBgD,EAAiB,WACRD,EAAK/C,MAAM,cACpBgD,EAAiB,YACRD,EAAK/C,MAAM,SACpBgD,EAAiB,QACRD,EAAK/C,MAAM,SACpBgD,EAAiB,OAGnBN,EAAWM,GAAgB7F,KAAK,CAC9B6E,KAAMA,EACNH,QAASoB,EAAWA,EAAS,GAAK,KAoFtCC,CAAqBR,EAAYN,GAvEnC,SAAwBM,GACtB,IAAIS,EAEJ,IAAK,IAAIH,KAAkBN,EACrBA,EAAWpJ,eAAe0J,KAC5BG,EAAS3B,GAAmB,GAEL,aAAnBwB,GAAoD,cAAnBA,IACnCG,EAAS3B,GAAmB,IAG9BkB,EAAWM,GAAgBI,KAAKD,IA6DpCE,CAAeX,GA9CjB,SAA6BA,EAAYL,EAAMhJ,GAC7C,IAAIiK,EAAc,GAGlB,SAASC,EAAsBC,GAG7B,IAFA,IAAIC,EAEK/N,EAAI,EAAGgO,EAAaF,EAAe/N,OAAQC,EAAIgO,EAAYhO,IACrD,WAAT2M,EACFoB,EAAYD,EAAe9N,GAAGsM,KAAKC,eAEnCwB,EAAYD,EAAe9N,GAAGsM,MACbC,QAGnBqB,EAAYnG,KAAKsG,GAIrB,IAAK,IAAI/N,EAAI,EAAGkN,EAAgBrB,EAAQ9L,OAAQC,EAAIkN,EAAelN,IACjE6N,EAAsBb,EAAWnB,EAAQ7L,KAG3C,OAAO4N,EAwBAK,CAAoBjB,EAAYL,GAUzChN,EAAOC,QAAU,SAAU8M,EAAO/I,GAChC,OAAI+I,EACE/I,EACK8I,EAASC,EAAO,SAAU/I,GAG5B8I,EAASC,EAAO,UAGlB,K,iBC5QT/M,EAAOC,QAGP,WAGE,IAFA,IAAIgI,EAAS,GAEJ5H,EAAI,EAAGA,EAAI6H,UAAU9H,OAAQC,IAAK,CACzC,IAAI8H,EAASD,UAAU7H,GAEvB,IAAK,IAAIO,KAAOuH,EACVlE,EAAehC,KAAKkG,EAAQvH,KAC9BqH,EAAOrH,GAAOuH,EAAOvH,IAK3B,OAAOqH,GAfT,IAAIhE,EAAiBnD,OAAOiB,UAAUkC,gB,8ICEtC,IAgBA,GAhBgB,yoBCChB,IAMA,GANyB,OAAGsK,EAAH,yM,UCIzB,IAAMC,GAAmB,2CAInBC,GAAc,mcAUdC,GAAa,upBA0BbC,GAAiB,6LAMjBC,GAAgB,kMAMhBC,EAAe,CACnBC,UAAW,gDACXC,SAAU,IACVC,WAAY,QA0Dd,EAlDqB,WACnB,OAA0BC,oBAAe,cAAjCC,EAAR,EAAQA,KAAMC,EAAd,EAAcA,QAuBRC,GAAcC,OAASF,GAC7B,OACE,QAACX,EAAD,MACE,QAACC,EAAD,MACE,QAACC,EAAD,MACE,kBAAKQ,EAAKI,YAAYC,QACtB,kBAAKL,EAAKM,kBACV,QAACZ,EAAD,MACE,QAAC,EAAD,sBACA,QAAC,EAAD,0BAGJ,QAACD,EAAD,MACE,QAAC,EAAAc,EAAD,CACEC,UAAU,6CACVC,MAAOP,EACPQ,QAAQ,QACRC,IAAI,sBACJC,MAAOjB,QC5GnB,IAAMkB,GAAmB,2dASnBC,GAAS,sZAeTC,GAAY,mWAaZC,GAAM,8FAKNC,GAAa,mIAIbC,GAAW,OAAGC,IAAH,oEAqDjB,EA5CoB,WAClB,OAA2BpB,oBAAe,cAAlCqB,EAAR,EAAQA,KAAMC,EAAd,EAAcA,SAuBRC,GAAenB,OAASkB,GAC9B,OACE,QAACR,EAAD,CAAqBU,GAAG,UACtB,QAACT,EAAD,MACE,QAACI,EAAD,CACET,MAAOa,EACPX,IAAQS,EAAKhB,YAAYC,MAAtB,MAAiCe,EAAKhB,YAAYoB,WAEvD,QAACT,EAAD,MACE,kBAAKK,EAAKd,kBACV,QAACU,EAAD,KACGI,EAAKhB,YAAYC,OAClB,QAACY,EAAD,UAAeG,EAAKhB,YAAYoB,cC3F5C,IAAMC,GAAiB,6EAIjBC,GAAc,qlBA+BdC,GAAc,sRAQdC,GAAI,4rBAYJC,GAAY,OAAGV,IAAH,mHAMZW,GAAyB,OAAGX,IAAH,mHAMzBY,GAAQ,wKA2Fd,EAzEuB,WACrB,OAAgDhC,oBAAe,cAAvDiC,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,SAAUC,EAA3B,EAA2BA,QAASC,EAApC,EAAoCA,QA0CpC,EAEIH,EADF5B,YAAeC,EADjB,EACiBA,MAAO+B,EADxB,EACwBA,SAAUC,EADlC,EACkCA,MAAOC,EADzC,EACyCA,MAAOC,EADhD,EACgDA,MAE1CC,GAAerC,OAAS8B,GACxBQ,GAActC,OAAS+B,GACvBQ,GAAcvC,OAASgC,GAC7B,OACE,QAACV,EAAD,MACE,QAACC,EAAD,MACE,kBAAKrB,IACL,kBAAK+B,IACL,QAACT,EAAD,MACE,QAACC,EAAD,CAAMe,KAAK,oBACT,QAACd,EAAD,CAAWlB,IAAK0B,EAAO5B,MAAO+B,KAC9B,QAACT,EAAD,KAAWM,KAEb,QAACT,EAAD,CAAMe,KAAK,kCACT,QAACd,EAAD,CAAWlB,IAAK2B,EAAO7B,MAAOiC,KAC9B,QAACX,EAAD,KAAWO,KAEb,QAACV,EAAD,CAAMe,KAAK,mCACT,QAACb,EAAD,CAAwBnB,IAAK4B,EAAO9B,MAAOgC,KAC3C,QAACV,EAAD,KAAWQ,QCzJvB,IAOA,GAP2B,iKCwD3B,EA/CuB,SAAC,GAIU,IAHhC/B,EAG+B,EAH/BA,UACAoC,EAE+B,EAF/BA,QACA1P,EAC+B,EAD/BA,KAEM2P,GAAe9C,oBAAe,cA2BpC,OACE,QAAC,EAAD,CAAuBS,UAAWA,GACnB,OAAZoC,GAAgC,KAAZA,GACnB,QAAC,EAAArC,EAAD,CAAaE,OAAON,OAAS0C,EAAa3P,IAAQyN,IAAKzN,KAEvD,eACE4P,wBAAyB,CACvBC,OAAQH,OCzCpB,IAAMI,GAAmB,46BAoBH,SAAApO,GAAK,MACG,UAA1BA,EAAMqO,gBAAN,0BArBqB,KAwBnBC,GAAqB,yKAIrBC,GAAsB,iKAItBC,GAAa,oOAObC,GAAmB,sUAOnBC,GAAwB,OAAOC,EAAP,qBAAH,gEAKrBC,GAAoB,OAAOF,EAAP,qBAAH,sJAMjBG,GAAiB,OAAOH,EAAP,qBAAH,6CAIdI,GAAgB,OAAGJ,EAAH,mPAchBK,EAAkB,SAAC,GAAD,IACtBC,EADsB,EACtBA,aACA1Q,EAFsB,EAEtBA,KACA0P,EAHsB,EAGtBA,QAHsB,OAKtB,QAACS,EAAD,KACoB,aAAjBO,GACC,QAACJ,EAAD,CAAmBtQ,KAAMA,EAAM0P,QAASA,IACrB,UAAjBgB,GACF,QAACH,EAAD,CAAgBvQ,KAAMA,EAAM0P,QAASA,IAClB,SAAjBgB,GACF,QAACF,EAAD,CAAexQ,KAAMA,EAAM0P,QAASA,KAEpC,QAACU,EAAD,CAAuBpQ,KAAMA,EAAM0P,QAASA,MAoElD,EAhDsB,SAAC,GAQwB,IAP7C1P,EAO4C,EAP5CA,KACAmN,EAM4C,EAN5CA,MACAwD,EAK4C,EAL5CA,SACAjB,EAI4C,EAJ5CA,QACAkB,EAG4C,EAH5CA,WACAF,EAE4C,EAF5CA,aACAG,EAC4C,EAD5CA,KAEA,OACE,QAACf,EAAD,CAAqBC,gBAAiBa,GACtB,SAAbD,GACC,QAACX,EAAD,MACE,QAACE,EAAD,MACE,kBAAK/C,IACL,cACEyC,wBAAyB,CACvBC,OAAQgB,OAId,QAACJ,EAAD,CACEC,aAAcA,EACd1Q,KAAMA,EACN0P,QAASA,MAIb,QAACO,EAAD,MACE,QAACQ,EAAD,CACEC,aAAcA,EACd1Q,KAAMA,EACN0P,QAASA,KAEX,QAACQ,EAAD,CAAe5C,UAAU,UACvB,kBAAKH,IACL,cACEyC,wBAAyB,CACvBC,OAAQgB,SCzFxB,EAxDqB,WACnB,IAAMC,GAAejE,oBAAe,cAgC9BkE,EAAmBrS,OAAO0G,KAAK0L,GAAcE,KAAI,SAAAC,GACrD,MAGIH,EAAaG,GAHjB,IACE/D,YAAeC,EADjB,EACiBA,MAAOwD,EADxB,EACwBA,SAAUjB,EADlC,EACkCA,QAASkB,EAD3C,EAC2CA,WAAYF,EADvD,EACuDA,aACrDG,EAFF,EAEEA,KAGF,OACE,QAAC,EAAD,CACErS,IAAKyS,EACLjR,KAAMiR,EACN9D,MAAOA,EACPwD,SAAUA,EACVjB,QAASA,EACTkB,WAAYA,EACZF,aAAcA,EACdG,KAAMA,OAKZ,OAAO,wBAAGE,I,aC3DG,SAASG,EAAepT,EAAKG,GAC1C,OCLa,SAAyBH,GACtC,GAAIK,MAAMG,QAAQR,GAAM,OAAOA,EDIxB,CAAeA,IELT,SAA+BA,EAAKG,GACjD,IAAIkT,EAAKrT,IAA0B,oBAAXkB,QAA0BlB,EAAIkB,OAAOC,WAAanB,EAAI,eAE9E,GAAU,MAANqT,EAAJ,CACA,IAIIC,EAAIC,EAJJC,EAAO,GACPC,GAAK,EACLC,GAAK,EAIT,IACE,IAAKL,EAAKA,EAAGtR,KAAK/B,KAAQyT,GAAMH,EAAKD,EAAGM,QAAQC,QAC9CJ,EAAK5L,KAAK0L,EAAG3S,QAETR,GAAKqT,EAAKtT,SAAWC,GAH4BsT,GAAK,IAK5D,MAAOI,GACPH,GAAK,EACLH,EAAKM,EACL,QACA,IACOJ,GAAsB,MAAhBJ,EAAW,QAAWA,EAAW,SAC5C,QACA,GAAIK,EAAI,MAAMH,GAIlB,OAAOC,GFtBuB,CAAqBxT,EAAKG,KAAM,EAAAqB,EAAA,GAA2BxB,EAAKG,IGLjF,WACb,MAAM,IAAIkB,UAAU,6IHIgF,G,wBICtG,SAASyS,IACP,OAAQA,EAAIlT,OAAOmT,QAAU,SAAUC,GACrC,IAAK,IAAIC,EAAI,EAAGA,EAAIjM,UAAU9H,OAAQ+T,IAAK,CACzC,IAAIH,EAAI9L,UAAUiM,GAElB,IAAK,IAAIC,KAAKJ,EACZlT,OAAOiB,UAAUkC,eAAehC,KAAK+R,EAAGI,KAAOF,EAAEE,GAAKJ,EAAEI,IAI5D,OAAOF,IACNnM,MAAM7E,KAAMgF,WAGjB,IAAIkM,EAAI,SAAWF,GACjB,MAAO,oBAAsBpT,OAAOiB,UAAUC,SAASC,KAAKiS,IAE1DpS,GAAI,SAAWoS,GACjB,MAAO,UAAYA,EAAEG,OAAS,QAAU,SAqCtCC,GAAI,SAAWJ,GACjB,IAAIC,EAAGH,EAAGI,EACV,OAAO,OAASD,EAAID,EAAEK,SAAWJ,EAAEK,SAAWjU,MAAMG,QAAQ,OAASsT,EAAIE,EAAEK,aAAU,EAASP,EAAEQ,SAAW,OAASJ,EAAIF,EAAEK,aAAU,EAASH,EAAEI,QAAQC,QAAO,SAAUP,EAAGC,GACzK,IAAIH,EACAI,GAAK,MAAQD,GAAK,OAASH,EAAIG,EAAEnH,WAAQ,EAASgH,EAAEU,MAAM,KAAK,KAAO,GACtE5S,GAAK,MAAQsS,OAAI,EAASA,EAAEO,OAAO,GAAGC,eAAiBR,EAAElS,MAAM,GAC/D7B,EAAI,SAASuD,OAAO9B,GACpB+S,EAAI,MAAMjR,OAAO9B,GACrB,OAAOA,MAAQzB,KAAK6T,IAAM,MAAQC,GAAKA,EAAEW,SAAWZ,EAAE7T,GAAK8T,EAAEW,UAAWD,KAAKX,IAAM,MAAQC,GAAKA,EAAEW,SAAWZ,EAAEW,GAvB3G,SAAWX,GACjB,GAAIA,EAAEY,OAAQ,CACZ,IAAIX,EAEAY,GAAK,OAAmBb,EAAEY,OAAOE,SAAS,gDAC1CC,EAAKf,EAAEgB,MAAM/L,QAAQ,KAAM,IAC3BwK,EAAKoB,EAAGpN,QAAO,SAAUuM,GAC3B,OAAQ,MAAQA,OAAI,EAASA,EAAE,GAAGiB,SAAS,WAAa,MAAQjB,OAAI,EAASA,EAAE,GAAGiB,SAAS,SAAW,MAAQjB,OAAI,EAASA,EAAE,GAAGiB,SAAS,GAAGvR,OAAOqR,EAAI,UAGzJ,OAAQ,MAAQtB,GAAM,OAASQ,EAAIR,EAAG,SAAM,EAASQ,EAAE,KAAO,GAGhE,MAAO,GAU+GiB,CAAEjB,KAAMD,IAC3H,IAAM,IAEPtS,GAAI,SAAWsS,GACjB,GAAIA,GAAKA,EAAEG,OAAQ,CACjB,IAAIgB,EAAK,GACLC,EAAMxT,GAAEoS,GACRX,EAzCA,SAAWW,GACjB,OAAOA,EAAEqB,MAAQrB,EAAEsB,OAwCRX,CAAEX,GACPuB,EAvCA,SAAWvB,GACjB,IAAIC,EAAGH,EAAGI,EAAGtS,EACb,OAAOoS,EAAEwB,YAAc,OAASvB,EAAID,EAAEwB,cAAgB,OAAS1B,EAAIG,EAAEwB,WAAa3B,EAAEmB,SAAS,UAAY,CACvGS,OAAQ,OAASxB,EAAIF,EAAEwB,kBAAe,EAAStB,EAAEuB,UAC/C,CACFE,UAAW,OAAS/T,EAAIoS,EAAEwB,kBAAe,EAAS5T,EAAE6T,UAClD,GAiCOtJ,CAAE6H,GACP4B,EAAKxB,GAAEJ,GAEX,OAAOmB,EAAGC,GAAOtB,EAAE,GAAIE,EAAEK,OAAOoB,SAAUG,EAAIL,EAAI,UAAYH,EAAM,CAClES,YAAaxC,GACX,GAAI,UAAY+B,EAAM,CACxBC,MAAOrB,EAAEqB,MACTC,OAAQtB,EAAEsB,QACR,IAAKH,EAGX,OAAO,MAGT,SAASW,GAAE9B,GACT,GAAIA,EAAG,CACL,GAAI3T,MAAMG,QAAQwT,GAAI,CACpB,IAkBI+B,EAAQ3C,EAlBD,SAAUY,GACnB,IAAIC,EArEJ,SAAWD,GACjB,IAAIC,EAEJ,IAAKA,EAAI,EAAGA,EAAID,EAAE9T,OAAQ+T,IACxB,IAAKC,EAAEF,EAAEC,IAAK,OAAOD,EAAEC,GAGzB,OAAO,KA8DO9T,CAAE6T,GAEV,GAAIC,EAAG,CACL,IAAI+B,EAAMpU,GAAEqS,GACRgC,EAAMjC,EAAEd,KAAI,SAAUc,GACxB,GAAIE,EAAEF,GAAI,OAAOA,EACjB,IAAIC,EAAIvS,GAAEsS,GACV,OAAOF,EAAE,GAAIG,GAAKA,EAAE+B,GAAM,MAAQhC,GAAKA,EAAEkC,MAAQ,CAC/CA,MAAOlC,EAAEkC,OACP,OAGN,MAAO,CAACF,EAAKC,GAGf,MAAO,GAhBE,CAiBTjC,GAC+B,GAC7BmC,EAAMJ,EAAM,GACZK,EAAKL,EAAM,GAEf,OAAOI,GCpHqCxV,EDoHNyV,GCpHC1V,EDoHNyV,KCpHC1V,EDoHL,IClH/BG,OAAOC,eAAeJ,EAAKC,EAAK,CAC9BC,MAAOA,EACPG,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZP,EAAIC,GAAOC,EAGNF,GDwGyC,KAG9C,OAAOiB,GAAEsS,GCvHE,IAAyBvT,EAAKC,EAAKC,ED0HhD,OAAO,KAGT,IAAI0V,GAAI,SAAWvC,GACjB,IAAII,EAAIJ,EAAErE,MACN7N,EAAIkS,EAAEwC,SACNnW,EAAI,SAAU6T,EAAGC,GACnB,GAAI,MAAQD,EAAG,MAAO,GACtB,IAAIF,EACAI,EACAtS,EAAI,GACJzB,EAAIS,OAAO0G,KAAK0M,GAEpB,IAAKE,EAAI,EAAGA,EAAI/T,EAAED,OAAQgU,IACxBD,EAAEzQ,QAAQsQ,EAAI3T,EAAE+T,KAAO,IAAMtS,EAAEkS,GAAKE,EAAEF,IAGxC,OAAOlS,EAXD,CAYNkS,EAAG,CAAC,QAAS,aACXa,EAAIT,GAAK4B,GAAE5B,GAEf,OAAOS,EAAI,gBAAgB,IAAG/T,OAAOmT,OAAO,GAAIY,EAAGxU,GAAIyB,GAAK,gBAAgB,MAAO,KAAMA,IEvI3F,IAAMkO,IAAY,OAAOyG,GAAP,qBAAH,iYA8Cf,GA/BsB,WACpB,OAA6BxH,oBAAe,cAApCyH,EAAR,EAAQA,OAAQC,EAAhB,EAAgBA,SAkBVC,GAAevH,OAASsH,GAC9B,OACE,yBACE,QAAC,GAAD,CAAWhH,MAAOiH,IAChB,kBAAKF,EAAOpH,YAAYC,QACxB,iBAAImH,EAAOlH,kBACX,QAAC,EAAD,KAAmBkH,EAAOpH,YAAYuH,WC3B9C,GAXkB,kBAChB,QAACC,EAAA,EAAD,CAAQC,QAAM,IACZ,QAACC,EAAA,EAAD,OACA,QAAC,EAAD,OACA,QAAC,EAAD,OACA,QAAC,EAAD,OACA,QAAC,EAAD,OACA,QAAC,GAAD,S,sCCfAC,EAAyBC,EAAQ,MAGrCjX,EAAQ,OAAU,EAElB,IAAIkX,EAAiCF,EAAuBC,EAAQ,OAEhEE,EAAYH,EAAuBC,EAAQ,OAE3CG,EAA0BJ,EAAuBC,EAAQ,OAEzDI,EAAkBL,EAAuBC,EAAQ,OAEjDK,EAASN,EAAuBC,EAAQ,OAExCM,EAAaP,EAAuBC,EAAQ,OAE5CO,EAAmBR,EAAuBC,EAAQ,OAElDQ,EAAeR,EAAQ,MAEvBS,EAAcT,EAAQ,MAEtBU,EAAcV,EAAQ,MAEtBW,EAAYX,EAAQ,MAEpBY,EAAiBZ,EAAQ,MAEzBa,EAAcb,EAAQ,MAEtBc,EAAiBd,EAAQ,MAEzBe,EAA6Bf,EAAQ,MAErCgB,EAAehB,EAAQ,MAEvBiB,EAAkB,SAAUC,GAG9B,SAASD,EAAgBrU,GACvB,IAAIuU,GAEJA,EAAQD,EAAiBnW,KAAKiB,KAAMY,IAAUZ,MAExCoV,qBAAuB,WAC3B,IAAIC,GAAe,EAAIX,EAAYY,cAAcH,EAAMvU,OAElDuU,EAAMI,MAAMC,WAAgD,mBAA5BL,EAAMvU,MAAM6U,aAC/CN,EAAMvU,MAAM6U,YAAY,CACtBC,UAAWL,IAIfF,EAAMQ,UAAW,EAAIhB,EAAUiB,oBAAoBT,EAAMQ,SAAUR,EAAMvU,MAAOuU,EAAMU,SAEtFV,EAAMW,UAAS,SAAUP,GACvB,MAAO,CACLC,WAAW,EACXO,WAAYR,EAAMQ,WAAa,MAEhC,WACDZ,EAAMW,UAAS,SAAUP,GACvB,MAAO,CACLS,UAAWX,EACXY,WAAW,EAAItB,EAAUuB,yBAAyBf,EAAMQ,UACxDI,WAAYR,EAAMQ,WAAa,UAMvC,IAAII,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAChD4U,GAAY,EAEZa,GAAc,EACdC,EAASH,EAAeG,OACxBC,GAAa,EAAI7B,EAAYY,cAAca,IAE1CI,IAAc,EAAIvB,EAAawB,cAAgBC,OAAOC,uBACzDlB,GAAY,EACZa,GAAc,IAGX,EAAIrB,EAAawB,eACpBhB,GAAY,GAGVW,EAAeQ,WACjBnB,GAAY,EACZa,GAAc,GAGhB,IAAIO,IAAgBT,EAAeQ,WAAaL,IAAY,EAAItB,EAAawB,cAIzEK,GADgB,EAAIhC,EAAYiC,cAAcX,GACZ,GAmBtC,OAjBAhB,EAAM4B,kBAAmB,EAAIlC,EAAYmC,yBAAwB,EAAIzC,EAAiB5T,SAASwV,EAAe3J,YAC9G2I,EAAM8B,kBAAoB9B,EAAM8B,kBAAkB3O,MAAK,EAAI6L,EAAwBxT,SAASwU,IAC5FA,EAAM+B,UAAY/B,EAAM+B,UAAU5O,MAAK,EAAI6L,EAAwBxT,SAASwU,IAC5EA,EAAMQ,UAAW,EAAIhB,EAAUwC,mBAAkB,EAAIjD,EAAUvT,SAAS,GAAIwV,EAAgB,CAC1FX,UAAWA,IACTL,EAAM8B,mBACV9B,EAAMU,QAAU,KAChBV,EAAMI,MAAQ,CACZC,UAAWA,EACXQ,WAlCc,EAmCdK,YAAaA,EACbC,OAAQA,EACRM,YAAaA,EACbL,WAAYA,EACZR,WAnBe,EAoBfc,kBAAmBA,GAEd1B,GA9ET,EAAIf,EAAgBzT,SAASsU,EAAiBC,GAiF9C,IAAIkC,EAASnC,EAAgBpW,UAiM7B,OA/LAuY,EAAOC,kBAAoB,WACzBrX,KAAK+W,kBAAmB,EAAIlC,EAAYmC,yBAAwB,EAAIzC,EAAiB5T,SAASX,KAAKY,MAAM4L,YAErGxM,KAAKuV,MAAMC,WAA+C,mBAA3BxV,KAAKY,MAAM6U,aAC5CzV,KAAKY,MAAM6U,YAAY,CACrBC,WAAW,EAAIhB,EAAYY,cAActV,KAAKY,UAI9CZ,KAAKY,MAAM+V,UAAY3W,KAAKuV,MAAMgB,cAChC,EAAI5B,EAAU2C,yBAAyBtX,KAAK2V,SAAU3V,KAAKY,QAC7DZ,KAAKiX,oBAIT,IACIJ,GADiB,EAAIhC,EAAYiC,cAAc9W,KAAKY,OACjB,GAEvCZ,KAAK8V,SAAS,CACZe,kBAAmBA,KAIvBO,EAAOG,mBAAqB,SAA4BC,GACtD,IAAIC,EAASzX,KAEb,IAAI,EAAIyU,EAAYiD,mBAAmB1X,KAAKY,MAAO4W,GAAY,CAC7D,IAAIrB,GAAiB,EAAI3B,EAAa4B,cAAcpW,KAAKY,OACrDyU,GAAe,EAAIX,EAAYY,cAAca,GAG7CU,GADiB,EAAIhC,EAAYiC,cAAcX,GACZ,GAEvCnW,KAAK8V,SAAS,CACZN,UAAWH,GAAgBc,EAAeQ,SAC1CX,UAAWX,EACXkB,WAAYlB,EACZwB,kBAAmBA,IAClB,WACDY,EAAOE,SAAU,EAAIlD,EAAYmD,oBAAoB,CACnDC,KAAMJ,EAAO9B,SACbmC,SAAU,aACVC,aAAa,MACT,EAAItD,EAAYmD,oBAAoB,CACxCC,KAAMJ,EAAO9B,SACbmC,SAAU,MACVC,aAAa,IAEfN,EAAO9B,UAAW,EAAIhB,EAAUwC,mBAAkB,EAAIjD,EAAUvT,SAAS,GAAIwV,EAAgB,CAC3FX,UAAWiC,EAAOlC,MAAMC,YACtBiC,EAAOR,wBAKjBG,EAAOY,qBAAuB,WACxBhY,KAAK2V,WACHtY,MAAMG,QAAQwC,KAAK2V,UACrB3V,KAAK2V,SAASzQ,SAAQ,SAAU+S,GACxBA,KAAoB,EAAIjD,EAAakD,UAAUD,KACnDA,EAAgBE,OAAS,SAI7BnY,KAAK2V,SAASwC,OAAS,MAIvBnY,KAAKoY,kBACPpY,KAAKoY,oBAIThB,EAAOF,UAAY,SAAmBmB,GACpCrY,KAAK6V,QAAUwC,EAEXrY,KAAKuV,MAAMc,aAAegC,IAC5BrY,KAAKoY,kBAAmB,EAAIrD,EAA2BuD,uBAAuBD,EAAKrY,KAAKoV,qBAAsBpV,KAAKY,MAAM2X,cAI7HnB,EAAOH,kBAAoB,YACzB,EAAIvC,EAAY8D,uBAAuBxY,KAAKY,OAC5CZ,KAAK8V,UAAS,SAAUP,GACtB,MAAO,CACLS,WAAW,EACXD,WAAYR,EAAMQ,WAAa,MAI/B/V,KAAKuV,MAAMgB,YACbvW,KAAK8V,SAAS,CACZQ,QAAQ,IAIRtW,KAAKY,MAAMW,QACbvB,KAAKY,MAAMW,UAIf6V,EAAOqB,OAAS,WACd,IAAIC,GAAc,EAAI7D,EAAY8D,aAAY,EAAInE,EAAa4B,cAAcpW,KAAKY,OAAQZ,KAAKY,MAAMgY,yBAEjGC,GADYH,EAAYlM,UACJkM,EAAY9L,OAChCA,OAA8B,IAAtBiM,EAA+B,GAAKA,EAC5CC,EAAQJ,EAAYI,MACpBC,EAAQL,EAAYK,MACpB9J,EAAkByJ,EAAYzJ,gBAC9B+J,EAAiBN,EAAYM,eAC7BC,EAAMP,EAAYO,IAClB3F,EAAWoF,EAAYpF,SACvB4F,EAAaR,EAAYQ,WACzBtY,GAAQ,EAAIqT,EAA+BtT,SAAS+X,EAAa,CAAC,YAAa,QAAS,QAAS,QAAS,kBAAmB,iBAAkB,MAAO,WAAY,eAElKS,GAAiB,EAAI3E,EAAa4E,qBAAqBxY,GACvDyY,EAAqC,kBAApBpK,EAAgC,iBAAyC,IAApBA,EAAkCA,EAAkB,GAC1HqK,GAAqC,IAAtBtZ,KAAKuV,MAAMe,SAAoBtW,KAAKuV,MAAMU,WAAmC,SAAtBjW,KAAKY,MAAM0V,OACjFiD,EAAkBD,EAAeN,EAAiB,EAAI,KAAO,OAC7DQ,GAAW,EAAItF,EAAUvT,SAAS,CACpCkP,SAAU,YACTjD,GACE5M,KAAKY,MAAMgY,0BAAyBY,EAASC,QAAU,KAC5D,IAAIhN,GAAQ,EAAIgI,EAAYiF,mBAAmB,CAC7CZ,MAAOA,EACPC,MAAOA,EACPhB,aAAa,IAEX4B,GAAoB,EAAIlF,EAAYiF,mBAAmB,CACzDZ,MAAOA,EACPC,MAAOA,KACH,GAEN,GAAID,GAASC,EACPA,IACFS,EAASnH,MAAQzF,EAAMyF,OAAS5F,EAAM4F,MACtCmH,EAASlH,OAAS1F,EAAM0F,QAAU7F,EAAM6F,OACxCkH,EAAS5K,QAAU,eAEG,YAAlBhC,EAAMgC,gBACD4K,EAAS5K,aAGf,KAAIsK,EAGT,OAAO,KAFPS,EAAkB/H,OAAS,GAK7B,IAAIgI,GAAmB,EAAIhF,EAAeiF,qBAAqB,CAC7DpN,MAAOA,EACPkL,QAAS3X,KAAK2X,QACdhC,SAAU3V,KAAK2V,SACfJ,MAAOvV,KAAKuV,QAEdvV,KAAK2X,QAAUiC,EAAiBE,gBAAkBF,EAAiBG,WAAa/Z,KAAK2X,QACrF,IAAIqC,GAAe,EAAIlF,EAAemF,qBAAoB,EAAI/F,EAAUvT,SAAS,CAC/E6L,UAAWxM,KAAKuV,MAAMsB,kBACtB0C,gBAAiBA,EACjBF,QAASA,EACTtC,iBAAkB/W,KAAK+W,iBACvBnK,MAAOA,EACP0J,OAAQgD,GACPM,EAAkB,CACnBM,aAAcpB,GAASC,KAErBoB,GAAuB,EAAIrF,EAAesF,sBAAsB,CAClE3N,MAAOA,EACP4M,QAASA,EACT7M,UAAWxM,KAAKuV,MAAMsB,kBACtBE,iBAAkB/W,KAAK+W,iBACvBnK,MAAOA,IAELyN,GAAqBvB,EAAQ,QAAU,KAAOC,EAAQ,QAAU,IAAM,IAAMuB,KAAKC,UAAUZ,EAAkB/H,QAC7G4I,GAAgB,EAAItG,EAAUvT,SAAS,GAAIX,KAAK+W,iBAAkByC,GACtE,OAAOnF,EAAO1T,QAAQ8Z,cAAcxB,GAAK,EAAI/E,EAAUvT,SAAS,CAC9D6L,UAAWxM,KAAKuV,MAAMsB,kBACtBjK,MAAO4N,EACPnC,IAAKrY,KAAKkX,UACVxZ,IAAK2c,GACJlB,GAAiB9E,EAAO1T,QAAQ8Z,cAAc,QAAS,CACxD3L,wBAAyB,CACvBC,OAAQiL,KAERha,KAAKuV,MAAMqB,aAAevC,EAAO1T,QAAQ8Z,cAAc,WAAY,KAAMpG,EAAO1T,QAAQ8Z,cAAc,QAAS,CACjH3L,wBAAyB,CACvBC,OAAQoL,MAEP7G,IAGA2B,EAnRa,CAoRpBZ,EAAO1T,QAAQ+Z,WAEjBzF,EAAgB0F,aAAe,CAC7BhE,UAAU,EACVL,QAAQ,EACR0C,eAAgB,IAChBC,IAAK,MACLL,yBAAyB,EACzBL,WAAY,QACZW,YAAY,GAGd,IAAI0B,EAActG,EAAW3T,QAAQka,MAAM,CACzCxI,MAAOiC,EAAW3T,QAAQlB,OAAOqb,WACjCxI,OAAQgC,EAAW3T,QAAQlB,OAAOqb,WAClCC,IAAKzG,EAAW3T,QAAQqa,OAAOF,WAC/BlJ,OAAQ0C,EAAW3T,QAAQqa,OAAOF,WAClCpI,OAAQ4B,EAAW3T,QAAQqa,OAC3BrI,UAAW2B,EAAW3T,QAAQqa,OAC9BC,QAAS3G,EAAW3T,QAAQqa,OAC5BE,WAAY5G,EAAW3T,QAAQqa,OAC/BG,QAAS7G,EAAW3T,QAAQqa,OAC5BI,WAAY9G,EAAW3T,QAAQqa,OAC/B9H,MAAOoB,EAAW3T,QAAQqa,SAGxBK,EAAc/G,EAAW3T,QAAQka,MAAM,CACzChI,YAAayB,EAAW3T,QAAQlB,OAAOqb,WACvCC,IAAKzG,EAAW3T,QAAQqa,OAAOF,WAC/BlJ,OAAQ0C,EAAW3T,QAAQqa,OAAOF,WAClC9I,MAAOsC,EAAW3T,QAAQqa,OAC1BtI,OAAQ4B,EAAW3T,QAAQqa,OAC3BrI,UAAW2B,EAAW3T,QAAQqa,OAC9BC,QAAS3G,EAAW3T,QAAQqa,OAC5BE,WAAY5G,EAAW3T,QAAQqa,OAC/BG,QAAS7G,EAAW3T,QAAQqa,OAC5BI,WAAY9G,EAAW3T,QAAQqa,OAC/B9H,MAAOoB,EAAW3T,QAAQqa,SAG5B/F,EAAgBqG,UAAY,CAC1BvC,MAAOzE,EAAW3T,QAAQ4a,UAAU,CAACX,EAAatG,EAAW3T,QAAQ6a,QAAQZ,GAActG,EAAW3T,QAAQ6a,QAAQlH,EAAW3T,QAAQ4a,UAAU,CAACX,EAAatG,EAAW3T,QAAQqa,YACpLlC,MAAOxE,EAAW3T,QAAQ4a,UAAU,CAACF,EAAa/G,EAAW3T,QAAQ6a,QAAQH,GAAc/G,EAAW3T,QAAQ6a,QAAQlH,EAAW3T,QAAQ4a,UAAU,CAACF,EAAa/G,EAAW3T,QAAQqa,YACpL1E,OAAQhC,EAAW3T,QAAQ4a,UAAU,CAACjH,EAAW3T,QAAQqa,OAAQ1G,EAAW3T,QAAQ8a,OACpFzC,eAAgB1E,EAAW3T,QAAQlB,OACnC+M,UAAW8H,EAAW3T,QAAQ4a,UAAU,CAACjH,EAAW3T,QAAQqa,OAAQ1G,EAAW3T,QAAQyD,SACvFuS,SAAUrC,EAAW3T,QAAQ8a,KAC7BC,YAAapH,EAAW3T,QAAQ4a,UAAU,CAACjH,EAAW3T,QAAQqa,OAAQ1G,EAAW3T,QAAQ8a,OACzF7O,MAAO0H,EAAW3T,QAAQ4a,UAAU,CAACjH,EAAW3T,QAAQyD,OAAQkQ,EAAW3T,QAAQgb,QACnF1M,gBAAiBqF,EAAW3T,QAAQ4a,UAAU,CAACjH,EAAW3T,QAAQqa,OAAQ1G,EAAW3T,QAAQ8a,OAC7Fla,OAAQ+S,EAAW3T,QAAQib,KAC3Bpa,QAAS8S,EAAW3T,QAAQib,KAC5BnG,YAAanB,EAAW3T,QAAQib,KAChC3C,IAAK3E,EAAW3T,QAAQ4a,UAAU,CAACjH,EAAW3T,QAAQqa,OAAQ1G,EAAW3T,QAAQib,OACjFhD,wBAAyBtE,EAAW3T,QAAQ8a,KAC5ClD,WAAYjE,EAAW3T,QAAQqa,OAC/B9B,WAAY5E,EAAW3T,QAAQ8a,MAEjC,IAAII,EAAW5G,EACflY,EAAQ,EAAU8e,G,kCCpXlB9e,EAAQO,YAAa,EACrBP,EAAQ4D,QAAU5D,EAAQ+e,kCAAoC/e,EAAQgf,cAAgBhf,EAAQif,+BAA4B,EAE1H,IAAIhH,EAAehB,EAAQ,MAEvBgI,EAA4B,SAAmCxP,GAGjE,IAFA,IAAIyP,GAAc,EAAIjH,EAAawB,aAAeC,OAAOyF,SAASD,YAAc,GAEvE9e,EAAI,EAAGA,EAAI8e,EAAY/e,OAAQC,IAAK,CAC3C,IAAIgf,OAAU,EAEd,IACEA,OAA0C,IAAzBF,EAAY9e,GAAG0M,MAAwBoS,EAAY9e,GAAG0M,WAA2C,IAA5BoS,EAAY9e,GAAGif,SAA2BH,EAAY9e,GAAGif,SAAW,GAC1J,MAAOpL,IAET,GAAImL,EAAS,CACX,IAAIE,EAAahf,MAAMwB,UAAUG,MAAMD,KAAKod,GAAS5K,QAAO,SAAU+K,EAAUC,GAK9E,OAJIA,EAAUC,eAAiBhQ,GAC7B8P,EAAS1X,KAAK2X,GAGTD,IACN,IAEH,GAAID,EAAWnf,OACb,OAAOmf,GAKb,MAAO,IAGTtf,EAAQif,0BAA4BA,EAEpC,IAAID,EAAgB,SAAuBU,GACzC,IAAIC,EAAS,GAEb,GAAID,EAAcvf,OAAS,QAAuC,IAA3Buf,EAAc,GAAG7P,MAGtD,OAFsB6P,EAAc,GAAG7P,MAAM3N,YAAYC,MAAQud,EAAc,GAAG7P,MAAM3N,YAAYH,YAGlG,IAAK,iBACL,IAAK,gCACHlB,OAAO+e,OAAOF,EAAc,GAAG7P,OAAO1H,SAAQ,SAAUpE,GACtD4b,GAAO,EAAI1H,EAAa4H,aAAa9b,IAAS2b,EAAc,GAAG7P,MAAM9L,MAEvE,MAEF,IAAK,sBACH4b,EAASD,EAAc,GAAG7P,MAC1B,MAEF,QACEiQ,QAAQC,MAAM,kCAKpB,OAAOJ,GAGT3f,EAAQgf,cAAgBA,EAExB,IAAID,EAAoC,SAA2CtP,GACjF,GAAIA,IAAa,EAAIwI,EAAakD,UAAU1L,GAAY,CACtD,IAAIiQ,EAAgBT,EAA0B,IAAMxP,GAEpD,IAAKiQ,aAAqD,EAASA,EAAcvf,QAAU,QAAuC,IAA3Buf,EAAc,GAAG7P,MACtH,OAAOhP,OAAO0G,KAAKyX,EAAcU,IAAgBhY,QAAO,SAAU/G,GAChE,OAAqC,IAA9BA,EAAI8C,QAAQ,eAAuD,KAAhCic,EAAc,GAAG7P,MAAMlP,MAChE6T,QAAO,SAAUwL,EAASrf,GAE3B,OADAqf,GAAQ,EAAI/H,EAAa4H,aAAalf,IAAQ+e,EAAc,GAAG7P,MAAMlP,GAC9Dqf,IACN,IAIP,MAAO,IAGThgB,EAAQ+e,kCAAoCA,EAE5C,IAkBID,EAlBsB,SAA6BrP,GACrD,IAAI,EAAIwI,EAAawB,aAAc,CACjC,IAAI2F,GAAU,EAAInH,EAAagI,eAAexQ,GAE9C,GAAI2P,aAAmB9e,MAAO,CAC5B,IAAI4f,EAAe,GAInB,OAHAd,EAAQjX,SAAQ,SAAUuE,GACxB,OAAOwT,EAAarY,KAAKkX,EAAkCrS,OAEtD7L,OAAOmT,OAAOlM,MAAMjH,OAAQqf,GAGrC,OAAOnB,EAAkCtP,GAG3C,MAAO,IAITzP,EAAQ4D,QAAUkb,G,+BCtGlB9e,EAAQO,YAAa,EACrBP,EAAQmgB,yBAA2BngB,EAAQogB,+BAAiCpgB,EAAQqgB,2BAAwB,EAC5G,IAAIC,EAAsBzf,OAAO0f,OAAO,IAMxCvgB,EAAQqgB,sBAJoB,SAA+B5Q,GACzD,OAAO6Q,EAAoB7Q,KAAc,GAW3CzP,EAAQogB,+BAN6B,SAAwC3Q,GACvEA,IACF6Q,EAAoB7Q,IAAa,IAYrCzP,EAAQmgB,yBANuB,WAC7B,IAAK,IAAI1Q,KAAa6Q,SACbA,EAAoB7Q,K,kCCpB/B,IAAIuH,EAAyBC,EAAQ,MAErCjX,EAAQO,YAAa,EACrBP,EAAQqZ,aAAerZ,EAAQqc,yBAAsB,EAErD,IAAIlF,EAAYH,EAAuBC,EAAQ,OAE3CuJ,EAAyBxJ,EAAuBC,EAAQ,OAExDwJ,EAAcxJ,EAAQ,MAM1BjX,EAAQqc,oBAJkB,SAA6BxY,GACrD,OAAO,EAAI2c,EAAuB5c,SAASC,IAqB7C7D,EAAQqZ,aAhBW,SAAsBxV,GACvC,IAAIuV,GAAiB,EAAIjC,EAAUvT,SAAS,GAAIC,GAC5CmY,EAAQ5C,EAAe4C,MAW3B,OAVY5C,EAAe2C,QAEd,EAAI0E,EAAYC,wBAAwB7c,EAAO,WAC1DuV,EAAe2C,OAAQ,EAAI0E,EAAYE,cAAcvH,EAAe2C,QAGlEC,IAAS,EAAIyE,EAAYC,wBAAwB7c,EAAO,WAC1DuV,EAAe4C,OAAQ,EAAIyE,EAAYE,cAAcvH,EAAe4C,QAG/D5C,I,kCC9BTpZ,EAAQO,YAAa,EACrBP,EAAQ4gB,gBAAkB5gB,EAAQ6gB,+BAAiC7gB,EAAQyb,sBAAwBzb,EAAQ8gB,gBAAkB9gB,EAAQuY,kBAAe,EAEpJ,IAAId,EAAeR,EAAQ,MAEvBwJ,EAAcxJ,EAAQ,MAEtBS,EAAcT,EAAQ,MAEtBgB,EAAehB,EAAQ,MAEvB8J,EAAalgB,OAAO0f,OAAO,IAE3BhI,EAAe,SAAsB1U,EAAOmd,EAAOC,QACvC,IAAVD,IACFA,EAAQ,QAGK,IAAXC,IACFA,GAAS,GAGX,IAAI7H,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAChDqd,GAAe,EAAIxJ,EAAYyJ,eAAe/H,MAAoB,EAAIqH,EAAYW,sBAAsBhI,GAE5G,GAAI8H,IAAiBD,EACnB,OAAOH,EAAgBjd,GAGzB,IAAIma,EAAMkD,GAAe,EAAIxJ,EAAY2J,kBAAkBjI,EAAgB4H,IAAS,EAAItJ,EAAY4J,gBAAgBlI,GAEpH,IAAI,EAAInB,EAAasJ,UAAUvD,GAAM,CACnC,IAAIwD,GAAY,EAAI9J,EAAY4J,gBAAgB,CAC9CvF,MAAOiC,EACPhC,MAAOgC,IAET,OAAO+C,EAAWS,KAAc,EAGlC,OAAOT,EAAW/C,KAAQ,GAG5Bhe,EAAQuY,aAAeA,EAEvB,IAAIuI,EAAkB,SAAyBjd,GAC7C,IAAIuV,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAEpD,OADiBuV,EAAe2C,OAAS3C,EAAe4C,OACtCyF,OAAM,SAAUC,EAAWV,GAC3C,OAAOzI,EAAaa,EAAgB4H,GAAO,OAI/ChhB,EAAQ8gB,gBAAkBA,EAE1B,IAAIrF,EAAwB,SAA+B5X,EAAOmd,EAAOC,QACzD,IAAVD,IACFA,EAAQ,QAGK,IAAXC,IACFA,GAAS,GAGX,IAAI7H,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAChDqd,GAAe,EAAIxJ,EAAYyJ,eAAe/H,MAAoB,EAAIqH,EAAYW,sBAAsBhI,GAE5G,GAAI8H,IAAiBD,EACnB,OAAOJ,EAA+Bhd,GAGxC,IAAIma,EAAMkD,GAAe,EAAIxJ,EAAY2J,kBAAkBjI,EAAgB4H,IAAS,EAAItJ,EAAY4J,gBAAgBlI,GAEpH,GAAI4E,EACF,IAAI,EAAI/F,EAAasJ,UAAUvD,GAAM,CACnC,IAAIwD,GAAY,EAAI9J,EAAY4J,gBAAgB,CAC9CvF,MAAOiC,EACPhC,MAAOgC,IAET+C,EAAWS,IAAa,OAExBT,EAAW/C,IAAO,GAKxBhe,EAAQyb,sBAAwBA,EAEhC,IAAIoF,EAAiC,SAAwChd,GAC3E,IAAIuV,GAAiB,EAAI3B,EAAa4B,cAAcxV,IACnCuV,EAAe2C,OAAS3C,EAAe4C,OAC7C7T,SAAQ,SAAUuZ,EAAWV,GACtC,OAAOvF,EAAsBrC,EAAgB4H,GAAO,OAIxDhhB,EAAQ6gB,+BAAiCA,EAQzC7gB,EAAQ4gB,gBANc,WACpB,IAAK,IAAI7c,KAAQgd,SACRA,EAAWhd,K,kCCnGtB/D,EAAQO,YAAa,EACrBP,EAAQ8c,yBAAsB,EAE9B,IAAIpF,EAAcT,EAAQ,MAEtBwJ,EAAcxJ,EAAQ,MAEtBgB,EAAehB,EAAQ,MAqG3BjX,EAAQ8c,oBAnGkB,SAA6B6E,GACrD,IAYI3E,EACAD,EAbArN,EAAQiS,EAAKjS,MACbkL,EAAU+G,EAAK/G,QACfhC,EAAW+I,EAAK/I,SAChBJ,EAAQmJ,EAAKnJ,MACboJ,GAAiB,EAAIlK,EAAYmD,oBAAoB,CACvDC,KAAMlC,EACNmC,SAAU,eAERC,EAAc1a,MAAMG,QAAQiP,MAAW,EAAI+Q,EAAYW,sBAAsB,CAC/ErF,MAAOrM,IAELmS,EAAYvhB,MAAMG,QAAQma,IAAW,EAAI3C,EAAa6J,cAAclH,GAAWA,EAG/EmH,EAAa/G,GAAexC,EAAMgB,cAAgBoI,EAEtD,GAAI5G,EAAa,CACV4G,IACH5E,GAAY,EAAItF,EAAYmD,oBAAoB,CAC9CC,KAAMpL,EACNqL,SAAU,YACVC,YAAaA,IAEfgC,GAAY,EAAI/E,EAAa+J,eAAc,EAAItK,EAAYmD,oBAAoB,CAC7EC,KAAMpL,EACNqL,SAAU,SACVC,YAAaA,IACXgC,IAGNA,GAAY,EAAI/E,EAAa+J,eAAc,EAAItK,EAAYmD,oBAAoB,CAC7EC,KAAMpL,EACNqL,SAAU,aACVkH,QAAQ,EACRjH,YAAaA,IACXgC,IAECxE,EAAMS,WAAe2I,IAAmBpJ,EAAMC,YAC7CmJ,GACF5E,GAAY,EAAI/E,EAAa+J,eAAc,EAAItK,EAAYmD,oBAAoB,CAC7EC,KAAMlC,EACNmC,SAAU,aACVC,YAAaA,IACXgC,GACJ+E,GAAa,IAEb/E,GAAY,EAAI/E,EAAa+J,eAAc,EAAItK,EAAYmD,oBAAoB,CAC7EC,KAAMlC,EACNmC,SAAU,MACVC,YAAaA,IACXgC,GACJ+E,GAAa,IAIjB/E,GAAY,EAAI/E,EAAa+J,cAAchF,EAAWpC,GACtD,IAAIsH,GAAa,EAAIxK,EAAYyK,uBAAuBzS,EAAMvP,QAE9D4c,EADAC,GAAY,EAAI/E,EAAa+J,cAAchF,EAAWkF,GAEtDlF,GAAY,EAAI/E,EAAa6J,cAAc9E,QAE3CA,EAAY,GACZA,GAAY,EAAItF,EAAYmD,oBAAoB,CAC9CC,KAAMpL,EACNqL,SAAU,gBACN,EAAIrD,EAAYmD,oBAAoB,CACxCC,KAAMpL,EACNqL,SAAU,WAGRvC,EAAMS,WAAaT,EAAMC,YAC3BuE,EAAY4E,EACZG,GAAa,GAIjB,IAAIK,EAAe5J,EAAMQ,WAAa,GAEjCgC,GAA6B,KAAdgC,GAAoBxE,EAAMS,WAAaT,EAAMC,WAAaG,IAAaA,EAASyJ,aAClGrF,GAAY,EAAItF,EAAYmD,oBAAoB,CAC9CC,KAAMlC,EACNmC,SAAU,MACVuH,aAAa,IAEfP,GAAa,GAGV/E,IAAWA,EAAY6E,GAC5B,IAAIhF,EAAmB,CACrBgF,UAAWA,EACX7E,UAAWA,EACXoF,aAAcA,EACdL,WAAYA,GAGd,OADIhF,IAAgBF,EAAiBE,eAAiBA,GAC/CF,I,kCCzGT7c,EAAQO,YAAa,EACrBP,EAAQua,wBAA0Bva,EAAQuiB,cAAgBviB,EAAQmZ,wBAA0BnZ,EAAQwiB,4BAA8BxiB,EAAQ6Y,mBAAqB7Y,EAAQyiB,0BAA4BziB,EAAQoa,sBAAmB,EAE9N,IAAI3C,EAAeR,EAAQ,MAEvBS,EAAcT,EAAQ,MAEtBwJ,EAAcxJ,EAAQ,MAEtBgB,EAAehB,EAAQ,MAEvBU,EAAcV,EAAQ,MAEtBmD,EAAmB,SAA0BvW,EAAOW,EAAQwc,EAAOC,QACtD,IAAXA,IACFA,GAAS,GAGX,IAAI7H,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAEpD,IAAI,EAAIoU,EAAawB,oBAAiD,IAAzBL,EAAe2C,YAAyD,IAAzB3C,EAAe4C,OAAwB,CAGjI,IAFmB,EAAItE,EAAYyJ,eAAe/H,MAAoB,EAAIqH,EAAYW,sBAAsBhI,KAEvF6H,EACnB,OAAOwB,EAA0B5e,EAAOW,GAG1C,IAAIke,EAAM,IAAIC,MAkBd,OAhBAD,EAAItH,OAAS,WACX,OAAO5W,KAGJke,EAAIE,UAA6C,mBAA1BxJ,EAAe5U,QACzCke,EAAIG,iBAAiB,OAAQzJ,EAAe5U,QAGR,mBAA3B4U,EAAe3U,SACxBie,EAAIG,iBAAiB,QAASzJ,EAAe3U,SAG3C2U,EAAeuF,cACjB+D,EAAI/D,YAAcvF,EAAeuF,cAG9BvF,EAAeQ,WAAYR,EAAeX,WAAewI,EAIvDyB,EAHE7J,EAAmB6J,EAAKtJ,EAAgB4H,EAAOC,GAM1D,OAAO,MAGTjhB,EAAQoa,iBAAmBA,EAE3B,IAAIqI,EAA4B,SAAmC5e,EAAOW,GACxE,IAAI4U,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAEhDif,GADa1J,EAAe2C,OAAS3C,EAAe4C,OAC7B7I,KAAI,SAAUuO,EAAWV,GAClD,OAAO5G,EAAiBhB,EAAgB5U,EAAQwc,GAAO,MAGzD,OAAI5H,EAAeQ,UAAYR,EAAeX,UACrCI,EAAmBiK,EAAW1J,GAGhC0J,GAGT9iB,EAAQyiB,0BAA4BA,EAEpC,IAAI5J,EAAqB,SAA4BD,EAAU/U,EAAOiV,EAASkI,EAAOC,QACpE,IAAZnI,IACFA,EAAU,WAGE,IAAVkI,IACFA,EAAQ,QAGK,IAAXC,IACFA,GAAS,GAGX,IAAI7H,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAEpD,IAAI,EAAIoU,EAAawB,oBAAiD,IAAzBL,EAAe2C,YAAyD,IAAzB3C,EAAe4C,OAAwB,CACjI,IAAIkF,GAAe,EAAIxJ,EAAYyJ,eAAe/H,MAAoB,EAAIqH,EAAYW,sBAAsBhI,GAE5G,GAAI8H,IAAiBD,EACnB,OAAOuB,EAA4B5J,EAAU/U,EAAOiV,GAGtD,IAAIiK,EAAY5D,SAASzB,cAAc,QACnCgE,EAAYR,GAAe,EAAIxJ,EAAY2J,kBAAkBjI,EAAgB4H,IAAS,EAAItJ,EAAYiF,mBAAmBvD,GAE7H,IAAKsI,EACH,OAAO,KAGT,IAAI,EAAIzJ,EAAakD,UAAUuG,GAC7B,OAAOA,EAQT,GALI5I,IACFF,EAAStD,MAAQwD,EAAQkK,YACzBpK,EAASrD,OAASuD,EAAQmK,eAGxB,EAAIvL,EAAYwL,qBAAsB,CACxC,IAAIC,EAAMhE,SAASzB,cAAc,WAOjC,GALI5E,IACFqK,EAAI7N,MAAQsD,EAAStD,MACrB6N,EAAI5N,OAASqD,EAASrD,SAGpB,EAAIkL,EAAYW,sBAAsBhI,IAC1B,EAAIqH,EAAY2C,2BAA2BhK,GAAgBiK,UACjElb,SAAQ,SAAUmb,GACxB,OAAOH,EAAII,YAAYD,MAI3B,IAAIE,GAAc,EAAI/C,EAAYgD,8BAA8B/B,EAAW,QAC3E8B,GAAeL,EAAII,YAAYC,GAC/B,IAAIE,GAAc,EAAIjD,EAAYgD,8BAA8B/B,EAAW,QAC3EgC,GAAeP,EAAII,YAAYG,GAC/BP,EAAII,YAAY3K,GAChBmK,EAAUQ,YAAYJ,GAMxB,OAHAvK,EAAS3D,MAAQyM,EAAUzM,OAAS,GACpC2D,EAAS+K,OAASjC,EAAU7M,QAAU,GACtC+D,EAASoF,IAAM0D,EAAU1D,KAAO,GACzBpF,EAGT,OAAO,MAGT5Y,EAAQ6Y,mBAAqBA,EAE7B,IAAI2J,EAA8B,SAAqCM,EAAWjf,EAAOiV,GACvF,OAAOgK,EAAU3P,KAAI,SAAUyF,EAAUoI,GACvC,OAAOnI,EAAmBD,EAAU/U,EAAOiV,EAASkI,GAAO,OAI/DhhB,EAAQwiB,4BAA8BA,EAQtCxiB,EAAQmZ,wBANsB,SAAiC2J,GAC7D,OAAOxiB,MAAMG,QAAQqiB,GAAaA,EAAUrB,OAAM,SAAU7I,GAC1D,OAAO2J,EAAc3J,MAClB2J,EAAcO,IAKrB,IAAIP,EAAgB,SAAuB3J,GACzC,OAAO,EAAIX,EAAakD,UAAUvC,MAAeA,KAAcA,EAASyJ,YAG1EriB,EAAQuiB,cAAgBA,EAQxBviB,EAAQua,wBANsB,SAAiC3B,EAAU/U,GACvE,OAAO+U,EAAWtY,MAAMG,QAAQmY,GAAYA,EAAS6I,OAAM,SAAUmC,GACnE,OAAO,EAAIlM,EAAYmM,aAAaD,QAChC,EAAIjM,EAAYY,cAAc1U,IAAS,EAAI6T,EAAYmM,aAAajL,KAAa,EAAIjB,EAAYY,cAAc1U,IAAS,EAAIoU,EAAakD,UAAUvC,K,kCC1K3J5Y,EAAQO,YAAa,EACrBP,EAAQ6jB,YAAc7jB,EAAQmiB,sBAAwBniB,EAAQ8jB,uBAAyB9jB,EAAQ2a,kBAAoB3a,EAAQ+jB,YAAc/jB,EAAQgkB,SAAWhkB,EAAQikB,aAAejkB,EAAQqhB,iBAAmBrhB,EAAQ2c,kBAAoB3c,EAAQshB,eAAiBthB,EAAQ6a,mBAAqB7a,EAAQmhB,cAAgBnhB,EAAQkjB,uBAAoB,EAEpV,IAAIzC,EAAcxJ,EAAQ,MAEtBgB,EAAehB,EAAQ,MAM3BjX,EAAQkjB,kBAJgB,WACtB,MAAqC,oBAAvBgB,qBAAsC,EAAIjM,EAAawB,cAKvE,IAAI0H,EAAgB,SAAuBtd,GACzC,OAAOsgB,QAAQtgB,EAAMkY,OAASzb,MAAMG,QAAQoD,EAAMkY,QAAUlY,EAAMmY,OAAS1b,MAAMG,QAAQoD,EAAMmY,SAGjGhc,EAAQmhB,cAAgBA,EAmExBnhB,EAAQ6a,mBAjEiB,SAA4B8G,GACnD,IAAI7G,EAAO6G,EAAK7G,KACZC,EAAW4G,EAAK5G,SAChBqJ,EAAczC,EAAKM,OACnBA,OAAyB,IAAhBmC,GAAgCA,EACzCC,EAAmB1C,EAAK3G,YACxBA,OAAmC,IAArBqJ,GAAsCA,EACpDC,EAAmB3C,EAAKW,YACxBA,OAAmC,IAArBgC,GAAqCA,EACvD,IAAKxJ,IAASC,EAAU,MAAO,GAC/B,IAAInF,EAAyB,cAAbmF,EAEhB,GAAIza,MAAMG,QAAQqa,MAAU,EAAI2F,EAAYW,sBAAsB,CAChErF,MAAOjB,IACL,CACF,IAAIyJ,EAAczJ,EAAK3H,KAAI,SAAUqR,GACnC,MAAiB,eAAbzJ,GAA0C,QAAbA,EACxBuH,EAAcuB,EAAYW,IAAgBA,EAAYzJ,IAAa,GAAKyJ,EAAYzJ,GAG5E,eAAbA,IAA6B,EAAI9C,EAAakD,UAAUqJ,KAIrD,EAAIvM,EAAakD,UAAUqJ,GAHzBA,EAGsDA,GAAezJ,KAAYyJ,EAAcA,EAAYzJ,GAAY,MAElI,OAAOkJ,EAAa,CAClBM,YAAaA,EACb3O,UAAWA,EACXqM,OAAQA,EACRjH,YAAaA,IAIjB,IAAI,EAAIyF,EAAYW,sBAAsB,CACxCrF,MAAOjB,MACW,eAAbC,GAA0C,QAAbA,GAAmC,WAAbA,GAAyBnF,GAAY,CAC7F,IAAI6O,EAAc9H,EAAkB,CAClCZ,MAAOjB,IAET,OAAOC,KAAY0J,EAAcR,EAAa,CAC5CM,YAAaE,EAAY1J,GACzBnF,UAAWA,EACXqM,OAAQA,IACL,GAGP,MAAoB,iBAATnH,EACF,GAGS,eAAbC,GAA0C,QAAbA,KAAuBA,KAAYD,GAO9DC,KAAYD,EAAOmJ,EAAa,CACrCM,YAAazJ,EAAKC,GAClBnF,UAAWA,EACXqM,OAAQA,IACL,GAVIgC,EAAa,CAClBM,YAAajC,EAAcuB,EAAY/I,IAASA,EAAKC,IAAa,GAAKD,EAAKC,GAC5EkH,OAAQA,KAuBdjiB,EAAQshB,eAVa,SAAwBtL,GAC3C,IAAI+F,EAAQ/F,EAAM+F,MACdC,EAAQhG,EAAMgG,MACdlB,EAAO6B,EAAkB,CAC3BZ,MAAOA,EACPC,MAAOA,IAET,OAAOlB,GAAOA,EAAKkD,KAAc,MAKnC,IAAIrB,EAAoB,SAA2B+H,EAAO1D,GACxD,IAAIjF,EAAQ2I,EAAM3I,MACdC,EAAQ0I,EAAM1I,MACdhB,EAAc0J,EAAM1J,iBAEV,IAAVgG,IACFA,EAAQ,GAGV,IAAIyD,EAAc1I,GAASC,EAE3B,GAAImF,EAAc,CAChBpF,MAAOA,EACPC,MAAOA,IACL,CACF,GAAIhB,EACF,OAAOyJ,EAGT,IAAI,EAAIxM,EAAawB,eAAgB,EAAIgH,EAAYW,sBAAsB,CACzErF,MAAOA,EACPC,MAAOA,IACL,CACF,IAAI2I,EAAYF,EAAYxiB,QAAQohB,UAChCuB,EAAaD,EAAUE,UAAUpE,EAAYqE,cAEjD,IAAoB,IAAhBF,EACF,OAAOD,EAAUC,GAIrB,OAAOH,EAAYzD,GAGrB,OAAOyD,GAGTzkB,EAAQ2c,kBAAoBA,EAsB5B3c,EAAQqhB,iBApBe,SAA0B0D,EAAO/D,GACtD,IAAIjF,EAAQgJ,EAAMhJ,MACdC,EAAQ+I,EAAM/I,WAEJ,IAAVgF,IACFA,EAAQ,GAGV,IAAIyD,EAAc1I,GAASC,EAE3B,OAAImF,EAAc,CAChBpF,MAAOA,EACPC,MAAOA,IAEAyI,EAAYzD,IAAUyD,EAAY,GAGpCA,GAKT,IAAIR,EAAe,SAAsBe,GACvC,IAAIT,EAAcS,EAAMT,YACpBU,EAAkBD,EAAMpP,UACxBA,OAAgC,IAApBqP,GAAqCA,EACjDC,EAAeF,EAAM/C,OACrBA,OAA0B,IAAjBiD,GAAiCA,EAC1CC,EAAoBH,EAAMhK,YAC1BA,OAAoC,IAAtBmK,GAAuCA,EACrDC,EAAqBJ,EAAMK,aAC3BA,OAAsC,IAAvBD,GAAwCA,EAE3D,GAAI9kB,MAAMG,QAAQ8jB,GAAc,CAC9B,IAAIe,EAAcf,EAAYpR,KAAI,SAAUoS,GAC1C,GAAIA,EAAe,CACjB,IAAIC,EAAQxB,EAASuB,GAEjBE,EAAYJ,GAAgBtB,EAAYwB,GAExCG,EAAsBH,GAAiB3P,EAAY,IAAO2P,EAAgB,IAAOA,IAAkBC,IAAU5P,GAAa6P,EAAY,IAAMF,EAAgB,IAAMA,EACtK,OAAOtD,GAAUsD,EAAgB,OAASG,EAAsB,IAAMA,EAGxE,OAAOH,KAET,OAAOvK,EAAcsK,GAAc,EAAIrN,EAAa6J,cAAcwD,GAGpE,IAAI3P,EAASqO,EAASO,GAClBoB,EAAWN,GAAgBtB,EAAYQ,GACvCqB,EAAerB,GAAe3O,EAAY,IAAO2O,EAAc,IAAOA,IAAgB5O,IAAWC,GAAa+P,EAAW,IAAMpB,EAAc,IAAMA,EACvJ,OAAOA,EAActC,EAAS,OAAS2D,EAAe,IAAMA,EAAe,IAG7E5lB,EAAQikB,aAAeA,EAEvB,IAAID,EAAW,SAAkB6B,GAC/B,OAAO,EAAI5N,EAAakD,UAAU0K,KAAqD,IAApCA,EAAapiB,QAAQ,WAG1EzD,EAAQgkB,SAAWA,EAEnB,IAAID,EAAc,SAAqBQ,GACrC,OAAO,EAAItM,EAAakD,UAAUoJ,IAA6C,SAA7BA,EAAY7Y,OAAO,EAAG,IAG1E1L,EAAQ+jB,YAAcA,EAMtB/jB,EAAQ2a,kBAJgB,SAA2B9W,EAAO4W,GACxD,OAAO5W,EAAMkY,QAAUtB,EAAUsB,OAASlY,EAAMmY,QAAUvB,EAAUuB,OAAS8H,EAAuBjgB,EAAO4W,IAAc5W,EAAMkY,OAAStB,EAAUsB,OAASlY,EAAMkY,MAAMiC,MAAQvD,EAAUsB,MAAMiC,KAAOna,EAAMmY,OAASvB,EAAUuB,OAASnY,EAAMmY,MAAMgC,MAAQvD,EAAUuB,MAAMgC,KAK9Q,IAAI8F,EAAyB,SAAgCjgB,EAAO4W,GAClE,IAAIqL,EAAoBxlB,MAAMG,QAAQoD,EAAMkY,OACxCgK,EAAwBzlB,MAAMG,QAAQga,EAAUsB,OAChDiK,EAAoB1lB,MAAMG,QAAQoD,EAAMmY,OACxCiK,EAAwB3lB,MAAMG,QAAQga,EAAUuB,OAEpD,SAAI8J,IAAsBC,GAAyBC,IAAsBC,IAA0BH,GAAqBC,IAA0BC,GAAqBC,KAInKH,GAAqBC,EACnBliB,EAAMkY,MAAM5b,SAAWsa,EAAUsB,MAAM5b,QAClC0D,EAAMkY,MAAMmK,MAAK,SAAUxW,EAAOsR,GACvC,OAAOtR,EAAMsO,MAAQvD,EAAUsB,MAAMiF,GAAOhD,OAO9CgI,GAAqBC,EACnBpiB,EAAMmY,MAAM7b,SAAWsa,EAAUuB,MAAM7b,QAClC0D,EAAMmY,MAAMkK,MAAK,SAAUxW,EAAOsR,GACvC,OAAOtR,EAAMsO,MAAQvD,EAAUuB,MAAMgF,GAAOhD,YAHlD,IAWFhe,EAAQ8jB,uBAAyBA,EAUjC9jB,EAAQmiB,sBARoB,SAA+BhiB,GACzD,IACIgmB,EAAgBlC,EAAa,CAC/BM,YAFc,+EAIhB,OAAOjkB,MAAMH,GAAQimB,KAAKD,IAK5B,IAAItC,EAAc,SAAqBjL,GACrC,QAAOA,KAAW,EAAIX,EAAakD,UAAUvC,IAAaA,EAASgK,UAAsC,IAA1BhK,EAASyN,cAAiD,IAA3BzN,EAAS0N,gBAGzHtmB,EAAQ6jB,YAAcA,G,kCCnQtB7jB,EAAQO,YAAa,EACrBP,EAAQub,sBAAwBvb,EAAQumB,MAAQvmB,EAAQwmB,gBAAa,EAErE,IAEIC,EAFAxO,EAAehB,EAAQ,MAGvByP,EAAY,IAAIC,QAEhBH,EAAa,SAAoBI,GACnCA,EAAQze,SAAQ,SAAU0e,GACxB,GAAIH,EAAUI,IAAID,EAAM7e,QAAS,CAC/B,IAAI+e,EAAWL,EAAUM,IAAIH,EAAM7e,SAE/B6e,EAAMI,gBAAkBJ,EAAMK,kBAAoB,KACpDT,EAAGU,UAAUN,EAAM7e,QACnB0e,EAAUU,OAAOP,EAAM7e,QACvB+e,UAMR/mB,EAAQwmB,WAAaA,EAErB,IAAID,EAAQ,SAAe/K,GAOzB,YANkB,IAAPiL,IAAsB,EAAIxO,EAAawB,cAAgBC,OAAOC,uBACvE8M,EAAK,IAAI/M,OAAOC,qBAAqB6M,EAAY,CAC/ChL,WAAYA,KAITiL,GAGTzmB,EAAQumB,MAAQA,EAqBhBvmB,EAAQub,sBAnBoB,SAA+B8L,EAASN,EAAUvL,QACzD,IAAfA,IACFA,EAAa,SAGf,IAAI8L,EAAWf,EAAM/K,GAErB,OAAI8L,GACFA,EAASC,QAAQF,GACjBX,EAAUc,IAAIH,EAASN,GAChB,WACLO,EAASH,UAAUE,GACnBX,EAAUU,OAAOC,KAId,e,kCCpDT,IAAIrQ,EAAyBC,EAAQ,MAErCjX,EAAQO,YAAa,EACrBP,EAAQ8kB,aAAe9kB,EAAQohB,qBAAuBphB,EAAQ0gB,uBAAyB1gB,EAAQojB,0BAA4BpjB,EAAQyjB,6BAA+BzjB,EAAQ2gB,kBAAe,EAEzL,IAAI8G,EAAoBzQ,EAAuBC,EAAQ,OAEnDgB,EAAehB,EAAQ,MAgB3BjX,EAAQ2gB,aAdW,SAAsB+G,GACvC,IAAIC,EAAU,GACVC,GAAiB,EAAIH,EAAkB7jB,SAAS8jB,EAAe,SASnE,OARAE,EAAezf,SAAQ,SAAU0f,GAC/B,OAAQA,EAAQ1R,OAASwR,EAAQ9f,KAAKggB,MAGpCF,EAAQxnB,OAILynB,GAKT,IAAInE,EAA+B,SAAsC/T,EAAO3C,GAC9E,IAAI7E,EAASiX,SAASzB,cAAc,UAChCoK,EAAa,UAAW,EAAI7P,EAAa8P,YAAYhb,GAezD,OAbI+a,KAAcpY,IAChBxH,EAAO6E,KAAO,SAAWA,EACzB7E,EAAOyb,OAASjU,EAAMoY,IAGpBpY,EAAMuF,QACR/M,EAAO+M,MAAQvF,EAAMuF,OAGnBvF,EAAMyG,QACRjO,EAAOiO,MAAQzG,EAAMyG,OAGhBjO,EAAOyb,OAASzb,EAAS,MAGlClI,EAAQyjB,6BAA+BA,EAmBvCzjB,EAAQojB,0BAjBwB,SAAmCzB,GACjE,IAAI5F,EAAQ4F,EAAK5F,MACbC,EAAQ2F,EAAK3F,MAEjB,OADoBD,GAASC,GACRxH,QAAO,SAAUD,EAAS7E,GAC7C,IAAKA,EAAMyG,MACT,OAAO5B,EAGT,IAAIyT,EAAavE,EAA6B/T,EAAO,QACjDuY,EAAaxE,EAA6B/T,EAAO,QAGrD,OAFAsY,GAAczT,EAAQ1M,KAAKmgB,GAC3BC,GAAc1T,EAAQ1M,KAAKogB,GACpB1T,IACN,KAKL,IAAImM,EAAyB,SAAgC7c,EAAOE,GAClE,OAAOF,EAAME,IAASzD,MAAMG,QAAQoD,EAAME,KAAUF,EAAME,GAAMmiB,MAAK,SAAUxW,GAC7E,QAASA,QAAgC,IAAhBA,EAAMyG,UAInCnW,EAAQ0gB,uBAAyBA,EAMjC1gB,EAAQohB,qBAJmB,SAA8Bvd,GACvD,OAAO6c,EAAuB7c,EAAO,UAAY6c,EAAuB7c,EAAO,UAUjF7D,EAAQ8kB,aALW,SAAsB9O,GACvC,IAAIG,EAAQH,EAAMG,MAClB,QAAOA,KAAQ,EAAI8B,EAAawB,mBAA6C,IAAtBC,OAAOwO,cAAgCxO,OAAOwO,WAAW/R,GAAOgS,W,gCClFzHnoB,EAAQO,YAAa,EACrBP,EAAQgiB,aAAehiB,EAAQ8hB,aAAe9hB,EAAQooB,WAAapoB,EAAQigB,cAAgBjgB,EAAQ+nB,WAAa/nB,EAAQqoB,YAAcroB,EAAQ6f,YAAc7f,EAAQuhB,SAAWvhB,EAAQmb,SAAWnb,EAAQyZ,eAAY,EAMtNzZ,EAAQyZ,UAJQ,WACd,MAAyB,oBAAXC,aAAqD,IAApBA,OAAOyF,UAKxD,IAAIhE,EAAW,SAAkBva,GAC/B,MAAiD,oBAA1CC,OAAOiB,UAAUC,SAASC,KAAKpB,IAGxCZ,EAAQmb,SAAWA,EAMnBnb,EAAQuhB,SAJO,SAAkB3gB,GAC/B,MAAiD,oBAA1CC,OAAOiB,UAAUC,SAASC,KAAKpB,IAWxCZ,EAAQ6f,YANU,SAAqByI,GACrC,OAAOnN,EAASmN,KAA8B,IAAtBA,EAAI7kB,QAAQ,MAAe6kB,EAAIrf,cAAcC,QAAQ,yBAAyB,SAAUqf,EAAQvH,GACtH,OAAiB,IAAVA,EAAcuH,EAAOtf,cAAgBsf,EAAO5T,iBAClDzL,QAAQ,UAAW,KAAOof,GAW/BtoB,EAAQqoB,YANU,SAAqBC,GACrC,OAAOnN,EAASmN,IAAQA,EAAIpf,QAAQ,UAAW,IAAIA,QAAQ,UAAU,SAAUwB,GAC7E,MAAO,IAAMA,EAAMzB,kBAUvBjJ,EAAQ+nB,WAJS,SAAoBO,GACnC,OAAQA,aAAiC,EAASA,EAAI5T,OAAO,GAAGC,eAAiB2T,EAAIrmB,MAAM,IAyB7FjC,EAAQigB,cApBY,SAAuBqI,EAAKE,GAK9C,YAJkB,IAAdA,IACFA,EAAY,KAGVF,aAAehoB,MACVgoB,IAGLnN,EAASmN,KACPA,EAAIpT,SAASsT,GACRF,EAAI7T,MAAM+T,GAGZ,CAACF,KAeZtoB,EAAQooB,WAPS,SAAoBE,GACnC,OAAOnN,EAASmN,IAAQ,GAAG9T,OAAOxS,KAAKsmB,GAAK,SAAUG,EAAM/b,GAE1D,OAAc,GADd+b,GAAQA,GAAQ,GAAKA,EAAO/b,EAAKgc,WAAW,MAE3C,IAWL1oB,EAAQ8hB,aANW,SAAsB6G,GACvC,OAAOA,EAAYjhB,QAAO,SAAUgF,GAClC,MAAgB,KAATA,KACN/B,QAeL3K,EAAQgiB,aAVW,SAAsB4G,EAAWC,GAClD,OAAKvoB,MAAMG,QAAQmoB,GAIZA,EAAUzV,KAAI,SAAUzG,EAAMsU,GACnC,OAAOtU,GAAQmc,GAAWA,EAAQ7H,MAJ3B,CAAC4H,K,kCCpFZ,IAAI5R,EAAyBC,EAAQ,MAErCjX,EAAQO,YAAa,EACrBP,EAAQqd,qBAAuBrd,EAAQ8oB,iBAAmB9oB,EAAQkd,mBAAqBld,EAAQ+oB,8BAAgC/oB,EAAQgpB,+BAAiChpB,EAAQipB,yBAAsB,EAEtM,IAAI9R,EAAYH,EAAuBC,EAAQ,OAE3Ca,EAAcb,EAAQ,MAEtBS,EAAcT,EAAQ,MAEtBwJ,EAAcxJ,EAAQ,MAEtBgB,EAAehB,EAAQ,MAEvBgS,EAAsB,SAA6BxZ,EAAWyZ,QAC/C,IAAbA,IACFA,EAAW,WAGb,IAAIC,GAAmB,EAAIrR,EAAYsR,kBAAkB3Z,GACrD2P,GAAU,EAAInH,EAAagI,eAAekJ,GAC1CE,EAAgB,GAYpB,OAVI/oB,MAAMG,QAAQ2e,KAChBA,EAAUA,EAAQ1X,QAAO,SAAUyN,GACjC,MAAa,KAANA,MAGGhV,OAAS,IACnBkpB,EAAgB,IAAMjK,EAAQzU,KAAK,KAAOue,GAIvCG,GAGTrpB,EAAQipB,oBAAsBA,EAE9B,IAAID,EAAiC,SAAwCM,EAAqBC,GAChG,MAAO,SAAWD,EAAsB,kDAAoDC,EAAc,YAG5GvpB,EAAQgpB,+BAAiCA,EAEzC,IAAID,EAAgC,SAAuCO,EAAqBnT,EAAOoT,EAAaC,GAClH,MAAO,kBAAoBrT,EAAQ,eAAiB6S,EAA+BM,EAAqBC,GAAe,qBAAuBC,GAAmB,UAAYrT,EAAQ,iBAAmB6S,EAA+BM,EAAqBE,GAAmB,eAAiB,UAGlSxpB,EAAQ+oB,8BAAgCA,EAoBxC/oB,EAAQkd,mBAlBiB,SAA4ByE,GACnD,IAAIlS,EAAYkS,EAAKlS,UACjB+M,EAAkBmF,EAAKnF,gBACvBqF,EAAYF,EAAKE,UACjB7E,EAAY2E,EAAK3E,UACjBoF,EAAeT,EAAKS,aACpB9F,EAAUqF,EAAKrF,QACf/C,EAASoI,EAAKpI,OACdS,EAAmB2H,EAAK3H,iBACxBnK,EAAQ8R,EAAK9R,MACbkS,EAAaJ,EAAKI,WAClB5E,EAAewE,EAAKxE,aACpBsM,EAAeR,EAAoBxZ,GACnCia,EAAcT,EAAoBxZ,EAAW,UAC7Cka,GAA0B,EAAIxS,EAAUvT,SAAS,GAAIoW,EAAkBnK,GAC3E,MAAO,eAAiB4Z,EAAe,gBAAkBC,EAAc,4MAA8MpN,GAAW,qBAAuBA,EAAU,KAAO,kBAAmB,EAAIxE,EAAY8R,qBAAqBpN,EAAiBjD,GAAU,kBAAmB,EAAIzB,EAAY+R,0BAA0BF,GAA2B,4BAA8BF,EAAe,kDAAoDrH,GAAgBL,IAAe+G,EAAiB9L,EAAWG,IAAiB,IAAM,kBAAoBiF,GAAgBP,GAAaiH,EAAiBjH,EAAW1E,IAAiB,IAAM,0BAA4B2M,QAAQ1H,GAAgB,8BAAgCsH,EAAc,iDAAmDtH,GAAgBL,IAAe+G,EAAiB9L,EAAWG,IAAiB,IAAM,mBAAqBiF,GAAgBP,GAAaiH,EAAiBjH,EAAW1E,IAAiB,IAAM,kBAAoB4E,EAAa,YAAc+H,OAAO1H,GAAgB,IAAM,IAAM,2BAK1qC,IAAI0G,EAAmB,SAA0BpZ,EAAOyN,GACtD,IAAI4M,GAAmB,EAAIrS,EAAYyJ,eAAe,CACpDpF,MAAOoB,OACF,EAAIsD,EAAYW,sBAAsB,CAC3CrF,MAAOoB,IAGT,QAAI,EAAIlF,EAAawB,cAAgBsQ,IAC5Bra,EAAQ,qBAAuBA,EAAQ,IAGzC,IAGT1P,EAAQ8oB,iBAAmBA,EA8D3B9oB,EAAQqd,qBA5DmB,SAA8BrH,GACvD,IAAIvG,EAAYuG,EAAMvG,UAClBC,EAAQsG,EAAMtG,MAElB,GAAIA,EAAO,CACT,IAAIsL,EAAc1a,MAAMG,QAAQiP,MAAW,EAAI+Q,EAAYW,sBAAsB,CAC/ErF,MAAOrM,IAGLsa,GAAa,EAAItS,EAAYmD,oBAAoB,CACnDC,KAAMpL,EACNqL,SAAU,MACVuH,aAAa,EACbL,QALW,EAMXjH,YAAaA,IAEXiP,GAAe,EAAIvS,EAAYuM,cAAc,CAC/CM,YAAayF,EACb3E,cAAc,EACdrK,YAAaA,IAEXkP,EAAsB,GAE1B,GAAIlP,EAAa,CACf,IAAImP,GAAa,EAAIzS,EAAYmD,oBAAoB,CACnDC,KAAMpL,EACNqL,SAAU,aACVkH,QAAQ,EACRjH,YAAaA,IAEfkP,GAAsB,EAAIjS,EAAa6J,eAAc,EAAI7J,EAAa+J,cAAciI,EAAcE,IAGpG,IAAIV,EAAeR,EAAoBxZ,GAEvC,OAAI,EAAIgR,EAAYW,sBAAsB,CACxCrF,MAAOrM,IAEAA,EAAMyD,KAAI,SAAUiX,GACzB,IAAIC,GAAe,EAAI3S,EAAYuM,cAAc,CAC/CM,YAAa6F,EAAapM,MAExBsM,GAAa,EAAI5S,EAAYuM,cAAc,CAC7CM,YAAa6F,EAAalM,SAAW,KAGvC,OAAIkM,EAAajU,MACR4S,EAA8BU,EAAcW,EAAajU,MAAOkU,EAAcC,GAGhFvB,EAA8BU,EAAc,SAAUY,EAAcC,MAC1E3f,KAAK,IAGHqe,EAA+BS,EAAcS,GAAuBD,GAG7E,MAAO,K,kCChJT,IAAIjT,EAAyBC,EAAQ,MAErCjX,EAAQO,YAAa,EACrBP,EAAQia,uBAAyBja,EAAQ4b,WAAa5b,EAAQ4pB,oBAAsB5pB,EAAQ6pB,yBAA2B7pB,EAAQopB,iBAAmBppB,EAAQ+Z,kBAAe,EAEzK,IAAI5C,EAAYH,EAAuBC,EAAQ,OAE3CC,EAAiCF,EAAuBC,EAAQ,OAEhEsT,EAAavT,EAAuBC,EAAQ,OAE5CQ,EAAeR,EAAQ,MAEvBuT,EAAcvT,EAAQ,KAEtBS,EAAcT,EAAQ,MAEtBgB,EAAehB,EAAQ,MAkB3BjX,EAAQ+Z,aAhBW,SAAsB4H,GACvC,IAAIlS,EAAYkS,EAAKlS,UACjB5L,GAAQ,EAAIqT,EAA+BtT,SAAS+d,EAAM,CAAC,cAC3DvI,GAAiB,EAAI3B,EAAa4B,cAAcxV,GAChD4mB,GAAgB,EAAID,EAAYnK,uBAAuB5Q,GACvDiS,GAAY,EAAIhK,EAAYiF,mBAAmBvD,GAE/CsR,EAAsBH,EAAW3mB,QAAQsG,WAEzCygB,EAAc,SAAU,EAAI1S,EAAamQ,YAAY1G,GAAaA,EAAU7M,QAAUpF,GAAa,WAAa,IAAMib,EAEtHE,GAAuB,IAAMnb,GAAa,MADxBgb,IAAkBhb,EAAYkb,EAAc,KACM,KAAKE,OAE7E,OADKJ,IAAe,EAAID,EAAYpK,gCAAgC3Q,GAC7D,CAACmb,IAeV5qB,EAAQopB,iBAVe,SAA0B0B,GAC/C,GAAIA,EAAY,CACd,IAAIC,GAAe,EAAI9S,EAAawB,cAAgBC,OAAOsR,iBAAmBtR,OAAOsR,iBAAoD,oBAA1BC,sBAAwCA,sBAAwB,KAC3KC,EAAmB,IAAIC,OAAO,IAAMJ,EAAe,IAAK,KAC5D,OAAOD,EAAW5hB,QAAQgiB,EAAkB,QAG9C,OAAOJ,GAqBT9qB,EAAQ6pB,yBAhBuB,SAAkClK,GAC/D,OAAI,EAAI1H,EAAakD,UAAUwE,GACtBA,EAGLA,aAAkB9e,OACbA,OAAO0G,KAAKoY,GAAQjY,QAAO,SAAU/G,GAC1C,OAAqC,IAA9BA,EAAI8C,QAAQ,eAAuC,KAAhBkc,EAAOhf,MAChD6T,QAAO,SAAU4W,EAAiBzqB,GACnC,MAAO,GAAKyqB,GAAkB,EAAInT,EAAaoQ,aAAa1nB,GAAO,KAAOgf,EAAOhf,GAAO,QACvF,IAGE,IAiBTX,EAAQ4pB,oBAZkB,SAA6BpN,EAAiBjD,GAStE,YARwB,IAApBiD,IACFA,EAAkB,cAGL,IAAXjD,IACFA,GAAS,GAGJA,EAAS,iCAAmCiD,EAAkB,IAAM,qBAqB7Exc,EAAQ4b,WAhBS,SAAoB/X,GACnC,IAAIwnB,GAAc,EAAIlU,EAAUvT,SAAS,GAAIC,GAE7C,IAAKwnB,EAAYxP,wBACf,IACMwP,EAAYxb,OAASwb,EAAYxb,MAAM6M,UACrC4O,MAAMD,EAAYxb,MAAM6M,UAAY2O,EAAYxb,MAAM6M,QAAU,OAClE2O,EAAYxb,MAAM6M,QAAU,KAGhC,MAAOzI,IAGX,OAAOoX,GAcTrrB,EAAQia,uBATqB,SAAgCD,GAM3D,OAAO,EAAI7C,EAAUvT,SAAS,GALA,CAC5B2nB,mBAAoB,SACpBC,iBAAkB,YAClBC,eAAgB,SAEyCzR","file":"component---src-pages-index-tsx-dc693e317fbf62305a31.js","sourcesContent":["function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var Converter = require('./src/converter');\n/**\n * Function get source and destination alphabet and return convert function\n *\n * @param {string|Array} srcAlphabet\n * @param {string|Array} dstAlphabet\n *\n * @returns {function(number|Array)}\n */\n\n\nfunction anyBase(srcAlphabet, dstAlphabet) {\n var converter = new Converter(srcAlphabet, dstAlphabet);\n /**\n * Convert function\n *\n * @param {string|Array} number\n *\n * @return {string|Array} number\n */\n\n return function (number) {\n return converter.convert(number);\n };\n}\n\n;\nanyBase.BIN = '01';\nanyBase.OCT = '01234567';\nanyBase.DEC = '0123456789';\nanyBase.HEX = '0123456789abcdef';\nmodule.exports = anyBase;","'use strict';\n/**\n * Converter\n *\n * @param {string|Array} srcAlphabet\n * @param {string|Array} dstAlphabet\n * @constructor\n */\n\nfunction Converter(srcAlphabet, dstAlphabet) {\n if (!srcAlphabet || !dstAlphabet || !srcAlphabet.length || !dstAlphabet.length) {\n throw new Error('Bad alphabet');\n }\n\n this.srcAlphabet = srcAlphabet;\n this.dstAlphabet = dstAlphabet;\n}\n/**\n * Convert number from source alphabet to destination alphabet\n *\n * @param {string|Array} number - number represented as a string or array of points\n *\n * @returns {string|Array}\n */\n\n\nConverter.prototype.convert = function (number) {\n var i,\n divide,\n newlen,\n numberMap = {},\n fromBase = this.srcAlphabet.length,\n toBase = this.dstAlphabet.length,\n length = number.length,\n result = typeof number === 'string' ? '' : [];\n\n if (!this.isValid(number)) {\n throw new Error('Number \"' + number + '\" contains of non-alphabetic digits (' + this.srcAlphabet + ')');\n }\n\n if (this.srcAlphabet === this.dstAlphabet) {\n return number;\n }\n\n for (i = 0; i < length; i++) {\n numberMap[i] = this.srcAlphabet.indexOf(number[i]);\n }\n\n do {\n divide = 0;\n newlen = 0;\n\n for (i = 0; i < length; i++) {\n divide = divide * fromBase + numberMap[i];\n\n if (divide >= toBase) {\n numberMap[newlen++] = parseInt(divide / toBase, 10);\n divide = divide % toBase;\n } else if (newlen > 0) {\n numberMap[newlen++] = 0;\n }\n }\n\n length = newlen;\n result = this.dstAlphabet.slice(divide, divide + 1).concat(result);\n } while (newlen !== 0);\n\n return result;\n};\n/**\n * Valid number with source alphabet\n *\n * @param {number} number\n *\n * @returns {boolean}\n */\n\n\nConverter.prototype.isValid = function (number) {\n var i = 0;\n\n for (; i < number.length; ++i) {\n if (this.srcAlphabet.indexOf(number[i]) === -1) {\n return false;\n }\n }\n\n return true;\n};\n\nmodule.exports = Converter;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = filterInvalidDOMProps;\n\nvar _htmlAttributes = require(\"html-attributes\");\n\nvar _htmlAttributes2 = _interopRequireDefault(_htmlAttributes);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nvar eventProps = {\n onCopy: true,\n onCut: true,\n onPaste: true,\n onLoad: true,\n onError: true,\n onWheel: true,\n onScroll: true,\n onCompositionEnd: true,\n onCompositionStart: true,\n onCompositionUpdate: true,\n onKeyDown: true,\n onKeyPress: true,\n onKeyUp: true,\n onFocus: true,\n onBlur: true,\n onChange: true,\n onInput: true,\n onSubmit: true,\n onClick: true,\n onContextMenu: true,\n onDoubleClick: true,\n onDrag: true,\n onDragEnd: true,\n onDragEnter: true,\n onDragExit: true,\n onDragLeave: true,\n onDragOver: true,\n onDragStart: true,\n onDrop: true,\n onMouseDown: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseMove: true,\n onMouseOut: true,\n onMouseOver: true,\n onMouseUp: true,\n onSelect: true,\n onTouchCancel: true,\n onTouchEnd: true,\n onTouchMove: true,\n onTouchStart: true,\n onAnimationStart: true,\n onAnimationEnd: true,\n onAnimationIteration: true,\n onTransitionEnd: true\n};\n\nfunction isValidDOMProp(prop) {\n return eventProps[prop] || _htmlAttributes2.default[prop] || /^(data|aria)-/.test(prop);\n}\n\nfunction filterInvalidDOMProps(props) {\n var domProps = {};\n\n for (var prop in props) {\n if (props.hasOwnProperty(prop) && isValidDOMProp(prop)) {\n domProps[prop] = props[prop];\n }\n }\n\n return domProps;\n}","/*!\n * html-attributes\n * https://github.com/alexmingoia/html-attributes\n */\n'use strict';\n/**\n * @module html-attributes\n */\n\nmodule.exports = {\n \"abbr\": \"abbr\",\n \"accept\": \"accept\",\n \"acceptCharset\": \"accept-charset\",\n \"accessKey\": \"accesskey\",\n \"action\": \"action\",\n \"allowFullScreen\": \"allowfullscreen\",\n \"allowTransparency\": \"allowtransparency\",\n \"alt\": \"alt\",\n \"async\": \"async\",\n \"autoComplete\": \"autocomplete\",\n \"autoFocus\": \"autofocus\",\n \"autoPlay\": \"autoplay\",\n \"cellPadding\": \"cellpadding\",\n \"cellSpacing\": \"cellspacing\",\n \"challenge\": \"challenge\",\n \"charset\": \"charset\",\n \"checked\": \"checked\",\n \"cite\": \"cite\",\n \"class\": \"class\",\n \"className\": \"class\",\n \"cols\": \"cols\",\n \"colSpan\": \"colspan\",\n \"command\": \"command\",\n \"content\": \"content\",\n \"contentEditable\": \"contenteditable\",\n \"contextMenu\": \"contextmenu\",\n \"controls\": \"controls\",\n \"coords\": \"coords\",\n \"crossOrigin\": \"crossorigin\",\n \"data\": \"data\",\n \"dateTime\": \"datetime\",\n \"default\": \"default\",\n \"defer\": \"defer\",\n \"dir\": \"dir\",\n \"disabled\": \"disabled\",\n \"download\": \"download\",\n \"draggable\": \"draggable\",\n \"dropzone\": \"dropzone\",\n \"encType\": \"enctype\",\n \"for\": \"for\",\n \"form\": \"form\",\n \"formAction\": \"formaction\",\n \"formEncType\": \"formenctype\",\n \"formMethod\": \"formmethod\",\n \"formNoValidate\": \"formnovalidate\",\n \"formTarget\": \"formtarget\",\n \"frameBorder\": \"frameBorder\",\n \"headers\": \"headers\",\n \"height\": \"height\",\n \"hidden\": \"hidden\",\n \"high\": \"high\",\n \"href\": \"href\",\n \"hrefLang\": \"hreflang\",\n \"htmlFor\": \"for\",\n \"httpEquiv\": \"http-equiv\",\n \"icon\": \"icon\",\n \"id\": \"id\",\n \"inputMode\": \"inputmode\",\n \"isMap\": \"ismap\",\n \"itemId\": \"itemid\",\n \"itemProp\": \"itemprop\",\n \"itemRef\": \"itemref\",\n \"itemScope\": \"itemscope\",\n \"itemType\": \"itemtype\",\n \"kind\": \"kind\",\n \"label\": \"label\",\n \"lang\": \"lang\",\n \"list\": \"list\",\n \"loop\": \"loop\",\n \"manifest\": \"manifest\",\n \"max\": \"max\",\n \"maxLength\": \"maxlength\",\n \"media\": \"media\",\n \"mediaGroup\": \"mediagroup\",\n \"method\": \"method\",\n \"min\": \"min\",\n \"minLength\": \"minlength\",\n \"multiple\": \"multiple\",\n \"muted\": \"muted\",\n \"name\": \"name\",\n \"noValidate\": \"novalidate\",\n \"open\": \"open\",\n \"optimum\": \"optimum\",\n \"pattern\": \"pattern\",\n \"ping\": \"ping\",\n \"placeholder\": \"placeholder\",\n \"poster\": \"poster\",\n \"preload\": \"preload\",\n \"radioGroup\": \"radiogroup\",\n \"readOnly\": \"readonly\",\n \"rel\": \"rel\",\n \"required\": \"required\",\n \"role\": \"role\",\n \"rows\": \"rows\",\n \"rowSpan\": \"rowspan\",\n \"sandbox\": \"sandbox\",\n \"scope\": \"scope\",\n \"scoped\": \"scoped\",\n \"scrolling\": \"scrolling\",\n \"seamless\": \"seamless\",\n \"selected\": \"selected\",\n \"shape\": \"shape\",\n \"size\": \"size\",\n \"sizes\": \"sizes\",\n \"sortable\": \"sortable\",\n \"span\": \"span\",\n \"spellCheck\": \"spellcheck\",\n \"src\": \"src\",\n \"srcDoc\": \"srcdoc\",\n \"srcSet\": \"srcset\",\n \"start\": \"start\",\n \"step\": \"step\",\n \"style\": \"style\",\n \"tabIndex\": \"tabindex\",\n \"target\": \"target\",\n \"title\": \"title\",\n \"translate\": \"translate\",\n \"type\": \"type\",\n \"typeMustMatch\": \"typemustmatch\",\n \"useMap\": \"usemap\",\n \"value\": \"value\",\n \"width\": \"width\",\n \"wmode\": \"wmode\",\n \"wrap\": \"wrap\"\n};","var _toConsumableArray = require(\"/Users/jprince/Documents/other/metaplex/js/node_modules/@babel/runtime/helpers/toConsumableArray\");\n\nvar _defineProperty = require(\"/Users/jprince/Documents/other/metaplex/js/node_modules/@babel/runtime/helpers/defineProperty\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/**\n * Created by Samuel on 6/4/2016.\n * Simple wrapper functions to produce shorter UUIDs for cookies, maybe everything?\n */\nvar anyBase = require('any-base');\n\nvar uuidV4 = require('uuid').v4;\n\nvar flickrBase58 = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';\nvar cookieBase90 = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&'()*+-./:<=>?@[]^_`{|}~\";\nvar baseOptions = {\n consistentLength: true\n}; // A default generator, instantiated only if used.\n\nvar toFlickr;\n/**\n * Takes a UUID, strips the dashes, and translates.\n * @param {string} longId\n * @param {function(string)} translator\n * @param {Object} [paddingParams]\n * @returns {string}\n */\n\nvar shortenUUID = function shortenUUID(longId, translator, paddingParams) {\n var translated = translator(longId.toLowerCase().replace(/-/g, ''));\n if (!paddingParams || !paddingParams.consistentLength) return translated;\n return translated.padStart(paddingParams.shortIdLength, paddingParams.paddingChar);\n};\n/**\n * Translate back to hex and turn back into UUID format, with dashes\n * @param {string} shortId\n * @param {function(string)} translator\n * @returns {string}\n */\n\n\nvar enlargeUUID = function enlargeUUID(shortId, translator) {\n var uu1 = translator(shortId).padStart(32, '0'); // Join the zero padding and the UUID and then slice it up with match\n\n var m = uu1.match(/(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})/); // Accumulate the matches and join them.\n\n return [m[1], m[2], m[3], m[4], m[5]].join('-');\n}; // Calculate length for the shortened ID\n\n\nvar getShortIdLength = function getShortIdLength(alphabetLength) {\n return Math.ceil(Math.log(Math.pow(2, 128)) / Math.log(alphabetLength));\n};\n\nmodule.exports = function () {\n /**\n * @param {string} toAlphabet - Defaults to flickrBase58 if not provided\n * @param {Object} [options]\n *\n * @returns {{new: (function()),\n * uuid: (function()),\n * fromUUID: (function(string)),\n * toUUID: (function(string)),\n * alphabet: (string)}}\n */\n var makeConvertor = function makeConvertor(toAlphabet, options) {\n // Default to Flickr 58\n var useAlphabet = toAlphabet || flickrBase58; // Default to baseOptions\n\n var selectedOptions = _objectSpread(_objectSpread({}, baseOptions), options); // Check alphabet for duplicate entries\n\n\n if (_toConsumableArray(new Set(Array.from(useAlphabet))).length !== useAlphabet.length) {\n throw new Error('The provided Alphabet has duplicate characters resulting in unreliable results');\n }\n\n var shortIdLength = getShortIdLength(useAlphabet.length); // Padding Params\n\n var paddingParams = {\n shortIdLength: shortIdLength,\n consistentLength: selectedOptions.consistentLength,\n paddingChar: useAlphabet[0]\n }; // UUIDs are in hex, so we translate to and from.\n\n var fromHex = anyBase(anyBase.HEX, useAlphabet);\n var toHex = anyBase(useAlphabet, anyBase.HEX);\n\n var generate = function generate() {\n return shortenUUID(uuidV4(), fromHex, paddingParams);\n };\n\n var translator = {\n new: generate,\n generate: generate,\n uuid: uuidV4,\n fromUUID: function fromUUID(uuid) {\n return shortenUUID(uuid, fromHex, paddingParams);\n },\n toUUID: function toUUID(shortUuid) {\n return enlargeUUID(shortUuid, toHex);\n },\n alphabet: useAlphabet,\n maxLength: shortIdLength\n };\n Object.freeze(translator);\n return translator;\n }; // Expose the constants for other purposes.\n\n\n makeConvertor.constants = {\n flickrBase58: flickrBase58,\n cookieBase90: cookieBase90\n }; // Expose the generic v4 UUID generator for convenience\n\n makeConvertor.uuid = uuidV4; // Provide a generic generator\n\n makeConvertor.generate = function () {\n if (!toFlickr) {\n // Generate on first use;\n toFlickr = makeConvertor(flickrBase58).generate;\n }\n\n return toFlickr();\n };\n\n return makeConvertor;\n}();","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","var extend = require('xtend');\n\nvar mqTypes = ['blank', 'all', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'print'];\n/**\n * @param {Array} rules\n * @param {String} type\n * @param {String} prop\n *\n * @return {Boolean}\n */\n\nfunction itemsValid(rules, type, prop) {\n var flag = true;\n\n for (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {\n if (typeof rules[i] !== type || prop && !rules[i].hasOwnProperty(prop)) {\n flag = false;\n break;\n }\n }\n\n return flag;\n}\n/**\n * @param {Array} rules\n * @param {String} type\n * @param {String} prop\n *\n * @return {Boolean}\n */\n\n\nfunction allValid(rules, type, prop) {\n if (!rules || !rules.length || typeof rules === 'string') {\n return 'none';\n }\n\n if (type === 'object' && (!prop || typeof prop !== 'string') || !itemsValid(rules, type, prop)) {\n return 'some';\n }\n\n return 'all';\n}\n/**\n * Normalize between array with strings and array with objects\n *\n * @param {Array} rules\n * @param {String} type\n * @param {String} prop\n *\n * @return {Object}\n */\n\n\nfunction prepareRules(rules, type, prop) {\n var collection = [];\n var o = {};\n\n for (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {\n if (type === 'string') {\n o = extend({}, {\n __media: rules[i]\n });\n } else {\n o = extend({}, rules[i]);\n o.__media = rules[i][prop];\n }\n\n collection.push(o);\n }\n\n return collection;\n}\n/**\n * @param {Boolean} isMax\n *\n * @return {Function}\n */\n\n\nfunction determineSortOrder(isMax) {\n /**\n * Determine sort order based on provided arguments\n *\n * @param {Object} a\n * @param {Object} b\n *\n * @return {Integer}\n */\n return function (a, b) {\n var sortValA = a.sortVal;\n var sortValB = b.sortVal;\n var ruleA = a.item.__media;\n var ruleB = b.item.__media;\n isMax = typeof isMax !== 'undefined' ? isMax : false; // Consider print for sorting if sortVals are equal\n\n if (sortValA === sortValB) {\n if (ruleA.match(/print/)) {\n // a contains print and should be sorted after b\n return 1;\n }\n\n if (ruleB.match(/print/)) {\n // b contains print and should be sorted after a\n return -1;\n }\n } // Return descending sort order for max-(width|height) media queries\n\n\n if (isMax) {\n return sortValB - sortValA;\n } // Return ascending sort order\n\n\n return sortValA - sortValB;\n };\n}\n/**\n * @return {Object}\n */\n\n\nfunction createCollection() {\n var mqCollection = {};\n\n for (var i = 0, mqTypesLength = mqTypes.length; i < mqTypesLength; i++) {\n mqCollection[mqTypes[i]] = [];\n }\n\n return mqCollection;\n}\n/**\n * @param {Object} collection\n * @param {Array} rules\n *\n * @return {Object}\n */\n\n\nfunction addRulesToCollection(collection, rules) {\n // Sort media queries by kind, this is needed to output them in the right order\n for (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {\n var item = rules[i];\n var rule = item.__media;\n var collectionType = 'blank';\n var valMatch = rule.match(/\\d+/g);\n\n if (rule.match(/min-width/)) {\n collectionType = 'minWidth';\n } else if (rule.match(/min-height/)) {\n collectionType = 'minHeight';\n } else if (rule.match(/max-width/)) {\n collectionType = 'maxWidth';\n } else if (rule.match(/max-height/)) {\n collectionType = 'maxHeight';\n } else if (rule.match(/print/)) {\n collectionType = 'print';\n } else if (rule.match(/all/)) {\n collectionType = 'all';\n }\n\n collection[collectionType].push({\n item: item,\n sortVal: valMatch ? valMatch[0] : 0\n });\n }\n\n return collection;\n}\n/**\n * @param {Object} collection\n *\n * @return {Object}\n */\n\n\nfunction sortCollection(collection) {\n var sorter;\n\n for (var collectionType in collection) {\n if (collection.hasOwnProperty(collectionType)) {\n sorter = determineSortOrder(false);\n\n if (collectionType === 'maxWidth' || collectionType === 'maxHeight') {\n sorter = determineSortOrder(true);\n }\n\n collection[collectionType].sort(sorter);\n }\n }\n\n return collection;\n}\n/**\n * @param {Object} collection\n * @param {String} type\n * @param {String} prop\n *\n * @return {Array}\n */\n\n\nfunction transformCollection(collection, type, prop) {\n var transformed = [];\n var collectionItem;\n\n function iterateCollectionItem(collectionItem) {\n var resultVal;\n\n for (var i = 0, typeLength = collectionItem.length; i < typeLength; i++) {\n if (type === 'string') {\n resultVal = collectionItem[i].item.__media;\n } else {\n resultVal = collectionItem[i].item;\n delete resultVal.__media;\n }\n\n transformed.push(resultVal);\n }\n }\n\n for (var i = 0, mqTypesLength = mqTypes.length; i < mqTypesLength; i++) {\n iterateCollectionItem(collection[mqTypes[i]]);\n }\n\n return transformed;\n}\n/**\n * @param {Array} rules\n * @param {String} type\n * @param {String} prop\n *\n * @return {Array}\n */\n\n\nfunction sortInit(rules, type, prop) {\n switch (allValid(rules, type, prop)) {\n case 'none':\n return [];\n\n case 'some':\n return rules;\n }\n\n var collection = createCollection();\n rules = prepareRules(rules, type, prop);\n addRulesToCollection(collection, rules);\n sortCollection(collection);\n return transformCollection(collection, type, prop);\n}\n/**\n * @param {Array} rules\n * @param {String} prop\n *\n * @return {Array}\n */\n\n\nmodule.exports = function (rules, prop) {\n if (rules) {\n if (prop) {\n return sortInit(rules, 'object', prop);\n }\n\n return sortInit(rules, 'string');\n }\n\n return [];\n};","module.exports = extend;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {};\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n}","// Shorthand Version.\nimport tw, { styled } from 'twin.macro';\n\nconst BaseButton = styled.button`\n ${tw`\n bg-gray90\n hover:bg-gradient-to-tl\n rounded-lg\n font-sans\n text-white\n uppercase\n transition duration-500\n `}\n font-size: 1.25rem;\n font-weight: 500;\n padding: 0 3rem;\n line-height: 4rem;\n`;\n\nexport default BaseButton;\n","// Shorthand Version.\nimport tw from 'twin.macro';\nimport BaseButton from './BaseButton';\n\nconst MetaPurpleButton = tw(BaseButton)`\n block md:inline\n bg-btnMetaPurple\n md:mr-6\n`;\n\nexport default MetaPurpleButton;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\nimport tw, { styled } from 'twin.macro';\n\nimport BaseButton from '../BaseButton';\nimport MetaPurpleButton from '../MetaPurpleButton';\n\nconst OuterSectionWrapper = styled.section`\n // background: linear-gradient(260.69deg, #000000 0%, #0e0e0e 99.91%);\n`;\n\nconst SectionWrapper = styled.div`\n ${tw`\n p-10 container-2xl\n min-h-halfScreen w-full\n flex flex-row content-center\n `}\n padding-top: 4.75rem;\n padding-bottom: 0;\n`;\n\nconst ContainerLeft = styled.div`\n ${tw`\n w-full md:w-1/2\n text-white text-xl md:text-2xl text-left\n md:py-0 sm:py-16\n `}\n h2, p, h3, h5 {\n ${tw`\n text-center\n md:text-left\n `}\n }\n h5 {\n ${tw`text-gray40 font-medium`}\n font-size: 1.75rem;\n line-height: 3rem;\n margin-bottom: 2.625rem;\n }\n h3 {\n font-size: 4rem;\n font-weight: 700;\n line-height: 4.875rem;\n margin-bottom: 1.25rem;\n }\n`;\n\nconst ContainerRight = tw.div`\n hidden md:block my-auto\n w-full md:w-1/2\n ml-20\n`;\n\nconst ButtonWrapper = tw.div`\n flex flex-wrap flex-col md:inline\n items-center\n mb-10\n`;\n\nconst heroImgStyle = {\n boxShadow: '0px -20px 72px 10px rgba(221, 212, 241, 0.08)',\n maxWidth: 560,\n marginLeft: 'auto',\n};\n\n/**\n * Top section (Hero section).\n *\n * @constructor\n */\nconst FirstSection = (): React.ReactElement => {\n const { hero, heroImg } = useStaticQuery(\n graphql`\n query {\n hero: markdownRemark(frontmatter: { slug: { eq: \"hero\" } }) {\n frontmatter {\n title\n }\n rawMarkdownBody\n }\n heroImg: file(relativePath: { eq: \"auction-page-1.png\" }) {\n childImageSharp {\n gatsbyImageData(\n quality: 90\n placeholder: BLURRED\n layout: FULL_WIDTH\n formats: [AUTO, WEBP, AVIF]\n )\n }\n }\n }\n `,\n );\n\n const heroImgData = getImage(heroImg);\n return (\n \n \n \n

{hero.frontmatter.title}

\n
{hero.rawMarkdownBody}
\n \n Get in Touch\n Start Building\n \n
\n \n \n \n
\n
\n );\n};\n\nexport default FirstSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\n\nconst EventSectionWrapper = styled.div`\n ${tw`\n w-full container-2xl\n py-16\n block md:flex flex-row\n `} //background: linear-gradient(270deg, rgba(97, 103, 116, 0.24) 7.29%, rgba(64, 63, 76, 0.24) 100%);\n background: linear-gradient(94.75deg, #141414 0%, #000000 98.82%);\n`;\n\nconst Container = styled.div`\n ${tw`\n flex flex-col md:flex-row\n items-center\n `}\n padding-left: 10rem;\n h3 {\n ${tw`text-2xl md:text-3xl text-center md:text-left`}\n }\n h4,\n h5 {\n ${tw`normal-case text-center md:text-left`}\n }\n`;\n\nconst InnerWrapper = styled.div`\n ${tw`\n flex flex-col flex-wrap flex-grow\n text-white\n w-full md:w-1/2\n mt-5 md:ml-11\n md:pr-24\n `}\n font-size: 2.125rem;\n line-height: 3.375rem;\n font-weight: 500;\n`;\n\nconst Author = styled.h4`\n font-size: 1.75rem;\n line-height: 3rem;\n`;\n\nconst AuthorDesc = tw.span`\n text-gray40\n`;\n\nconst RacImage = tw(GatsbyImage)`\n rounded-full\n`;\n\n/**\n * Cite section.\n *\n * @constructor\n */\nconst CiteSection = (): React.ReactElement => {\n const { cite, racImage } = useStaticQuery(\n graphql`\n query {\n cite: markdownRemark(frontmatter: { slug: { eq: \"cite\" } }) {\n frontmatter {\n title\n summary\n }\n rawMarkdownBody\n }\n racImage: file(relativePath: { eq: \"rac.png\" }) {\n childImageSharp {\n gatsbyImageData(\n quality: 90\n placeholder: BLURRED\n layout: CONSTRAINED\n )\n }\n }\n }\n `,\n );\n\n const racImageData = getImage(racImage);\n return (\n \n \n \n \n

{cite.rawMarkdownBody}

\n \n {cite.frontmatter.title}\n , {cite.frontmatter.summary}\n \n
\n
\n
\n );\n};\n\nexport default CiteSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\n\nconst OuterContainer = tw.div`\n overflow-hidden\n`;\n\nconst InnerContainer = styled.div`\n ${tw`\n relative\n flex flex-col justify-center items-center\n text-white\n `}\n transform: (45deg);\n padding-top: 3rem;\n padding-bottom: 6rem;\n &:after,\n &:before {\n content: '';\n position: absolute;\n transform: rotate(-45deg);\n width: 500% !important;\n height: 500% !important;\n top: -200% !important;\n left: -200% !important;\n z-index: -1;\n }\n h3 {\n font-size: 3rem;\n line-height: 4rem;\n font-weight: 700;\n }\n h5 {\n ${tw`text-gray40`}\n margin-bottom: 1rem;\n }\n`;\n\nconst DropWrapper = tw.div`\n flex flex-col\n justify-center items-center\n lg:grid grid-cols-3 gap-5\n place-content-center\n mt-4\n`;\n\nconst Drop = styled.a`\n ${tw`\n relative\n rounded-lg\n mx-2\n transform-gpu\n transition\n duration-150\n hover:scale-105\n `}\n`;\n\nconst DropImage = tw(GatsbyImage)`\n relative\n inset-0\n w-full\n`;\n\nconst DropImageCryptoKickers = tw(GatsbyImage)`\n relative\n inset-0\n w-full\n`;\n\nconst DropText = styled.span`\n ${tw`\n absolute\n // text-xl\n bottom-10\n left-10\n z-10\n `}\n font-size: 2rem;\n line-height: 2.5rem;\n font-weight: 500;\n`;\n\n/**\n * The Welcome Section.\n *\n * @constructor\n */\nconst WelcomeSection = (): React.ReactElement => {\n const { welcome, onoImage, ckImage, sdImage } = useStaticQuery(\n graphql`\n query {\n welcome: markdownRemark(frontmatter: { slug: { eq: \"welcome\" } }) {\n frontmatter {\n title\n subtitle\n drop1\n drop2\n drop3\n }\n }\n onoImage: file(relativePath: { eq: \"welcomeono.png\" }) {\n childImageSharp {\n gatsbyImageData(\n quality: 90\n placeholder: BLURRED\n layout: CONSTRAINED\n )\n }\n }\n ckImage: file(relativePath: { eq: \"welcomecryptokickers.png\" }) {\n childImageSharp {\n gatsbyImageData(\n quality: 90\n placeholder: BLURRED\n layout: CONSTRAINED\n )\n }\n }\n sdImage: file(relativePath: { eq: \"welcomesweetdreams.png\" }) {\n childImageSharp {\n gatsbyImageData(\n quality: 90\n placeholder: BLURRED\n layout: CONSTRAINED\n )\n }\n }\n }\n `,\n );\n const {\n frontmatter: { title, subtitle, drop1, drop2, drop3 },\n } = welcome;\n const onoImageData = getImage(onoImage);\n const ckImageData = getImage(ckImage);\n const sdImageData = getImage(sdImage);\n return (\n \n \n

{title}

\n
{subtitle}
\n \n \n \n {drop1}\n \n \n \n {drop2}\n \n \n \n {drop3}\n \n \n
\n
\n );\n};\n\nexport default WelcomeSection;\n","import tw, { styled } from 'twin.macro';\n\nconst SectionDisplayWrapper = styled.div`\n ${tw`\n text-black\n grid place-content-center\n `}\n`;\n\nexport default SectionDisplayWrapper;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\nimport SectionDisplayWrapper from '../SectionDisplayWrapper';\n\ntype Props = {\n display?: string;\n className?: string;\n name?: string;\n};\n\nconst SectionDisplay = ({\n className,\n display,\n name,\n}: Props): React.ReactElement => {\n const displayImage = useStaticQuery(\n graphql`\n {\n store: file(relativePath: { eq: \"store.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n nfts: file(relativePath: { eq: \"nfts.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n auctions: file(relativePath: { eq: \"auctions.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n collab: file(relativePath: { eq: \"collab.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n }\n `,\n );\n\n return (\n \n {display === null || display === '' ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default SectionDisplay;\n","import * as React from 'react';\nimport tw, { styled } from 'twin.macro';\n\nimport SectionDisplay from './SectionDisplay';\n\ntype SectionProps = {\n backgroundColor?: string;\n};\n\nconst SectionOuterWrapper = styled.div`\n ${tw`\n min-h-halfScreen w-full container-2xl\n py-5 md:py-20 text-base\n `}\n h3 {\n ${tw`px-5 md:px-10`}\n }\n p {\n ${tw`px-5 md:px-10`}\n }\n a {\n ${tw`\n text-btnMetaPurple\n border-b-2 border-transparent hover:border-b-2 hover:border-btnMetaPurple\n `}\n }\n .right {\n ${tw`text-right`}\n }\n background-color: ${props =>\n props.backgroundColor === 'light' ? `#121212` : `transparent`};\n`;\n\nconst SectionWrapperLeft = tw.div`\n flex flex-col-reverse md:flex-row items-center\n`;\n\nconst SectionWrapperRight = tw.div`\n flex flex-col md:flex-row items-center\n`;\n\nconst ContainerText = styled.div`\n ${tw`\n w-full md:w-1/2\n text-white text-left text-base\n `}\n`;\n\nconst ContainerDisplay = tw.div`\n w-full md:w-1/2\n flex flex-row items-center justify-center\n text-white text-base\n pb-10 md:pb-0\n`;\n\nconst RoundedSectionDisplay = styled(SectionDisplay)`\n ${tw`rounded-xl`}\n max-width: 90%;\n`;\n\nconst SectionBgGradient = styled(RoundedSectionDisplay)`\n ${tw`flex items-end`}\n background: linear-gradient(135deg, #eca572 0%, #155fce 100%);\n backdrop-filter: blur(600px);\n`;\n\nconst SectionBgColor = styled(RoundedSectionDisplay)`\n background: #ad7bbc;\n`;\n\nconst SectionBgDark = tw(RoundedSectionDisplay)`\n bg-baseBg\n p-10\n items-center\n text-center\n text-white\n`;\n\ntype ContainerSwitchProps = {\n name: string;\n display?: string;\n imageWrapper?: string;\n};\n\nconst ContainerSwitch = ({\n imageWrapper,\n name,\n display,\n}: ContainerSwitchProps) => (\n \n {imageWrapper === 'gradient' ? (\n \n ) : imageWrapper === 'color' ? (\n \n ) : imageWrapper === 'dark' ? (\n \n ) : (\n \n )}\n \n);\n\ntype SingleSectionProps = {\n name: string;\n title?: string;\n position?: string;\n display?: string;\n background?: string;\n imageWrapper?: string;\n html?: string;\n};\n\n/**\n * Single Multi Section with position switch.\n *\n * @constructor\n */\nconst SingleSection = ({\n name,\n title,\n position,\n display,\n background,\n imageWrapper,\n html,\n}: SingleSectionProps): React.ReactElement => {\n return (\n \n {position === 'left' ? (\n \n \n

{title}

\n \n
\n \n
\n ) : (\n \n \n \n

{title}

\n \n
\n
\n )}\n
\n );\n};\n\nexport default SingleSection;\n","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\n\nimport SingleSection from './SingleSection';\n\n/**\n * Multiple Sections from Markdown.\n *\n * @constructor\n */\nconst MultiSection = (): React.ReactElement => {\n const whichDisplay = useStaticQuery(\n graphql`\n fragment MarkdownSection on MarkdownRemark {\n frontmatter {\n title\n position\n display\n background\n imageWrapper\n }\n html\n }\n query {\n store: markdownRemark(frontmatter: { slug: { eq: \"store\" } }) {\n ...MarkdownSection\n }\n fees: markdownRemark(frontmatter: { slug: { eq: \"fees\" } }) {\n ...MarkdownSection\n }\n nfts: markdownRemark(frontmatter: { slug: { eq: \"nfts\" } }) {\n ...MarkdownSection\n }\n auctions: markdownRemark(frontmatter: { slug: { eq: \"auctions\" } }) {\n ...MarkdownSection\n }\n collab: markdownRemark(frontmatter: { slug: { eq: \"collab\" } }) {\n ...MarkdownSection\n }\n }\n `,\n );\n\n const multipleSections = Object.keys(whichDisplay).map(currentDisplay => {\n const {\n frontmatter: { title, position, display, background, imageWrapper },\n html,\n } = whichDisplay[currentDisplay];\n\n return (\n \n );\n });\n\n return <>{multipleSections};\n};\n\nexport default MultiSection;\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _defineProperty from \"/Users/jprince/Documents/other/metaplex/js/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"/Users/jprince/Documents/other/metaplex/js/node_modules/@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"/Users/jprince/Documents/other/metaplex/js/node_modules/@babel/runtime/helpers/esm/toConsumableArray\";\nimport e from \"gatsby-background-image\";\nimport r from \"react\";\n\nfunction l() {\n return (l = Object.assign || function (e) {\n for (var r = 1; r < arguments.length; r++) {\n var l = arguments[r];\n\n for (var t in l) {\n Object.prototype.hasOwnProperty.call(l, t) && (e[t] = l[t]);\n }\n }\n\n return e;\n }).apply(this, arguments);\n}\n\nvar t = function t(e) {\n return \"[object String]\" === Object.prototype.toString.call(e);\n},\n n = function n(e) {\n return \"fixed\" === e.layout ? \"fixed\" : \"fluid\";\n},\n i = function i(e) {\n var r;\n\n for (r = 0; r < e.length; r++) {\n if (!t(e[r])) return e[r];\n }\n\n return null;\n},\n u = function u(e) {\n return e.width / e.height;\n},\n a = function a(e) {\n var r, l, t, n;\n return e.placeholder ? null != (r = e.placeholder) && null != (l = r.fallback) && l.includes(\"base64\") ? {\n base64: null == (t = e.placeholder) ? void 0 : t.fallback\n } : {\n tracedSVG: null == (n = e.placeholder) ? void 0 : n.fallback\n } : {};\n},\n c = function c(e) {\n if (e.srcSet) {\n var r;\n\n var _l = _toConsumableArray(e.srcSet.matchAll(/(?:([^\"'\\s,]+)\\s*(?:\\s+\\d+[wx])(?:,\\s*)?)/gm)),\n _t = e.sizes.replace(\"px\", \"\"),\n _n = _l.filter(function (e) {\n return (null == e ? void 0 : e[0].includes(\"100w\")) || (null == e ? void 0 : e[0].includes(\"1x\")) || (null == e ? void 0 : e[0].includes(\"\".concat(_t, \"w\")));\n });\n\n return (null == _n || null == (r = _n[0]) ? void 0 : r[1]) || \"\";\n }\n\n return \"\";\n},\n s = function s(e) {\n var r, l, t;\n return null != (r = e.images) && r.sources && Array.isArray(null == (l = e.images) ? void 0 : l.sources) ? null == (t = e.images) ? void 0 : t.sources.reduce(function (e, r) {\n var l;\n var t = (null == r || null == (l = r.type) ? void 0 : l.split(\"/\")[1]) || \"\",\n n = (null == t ? void 0 : t.charAt(0).toUpperCase()) + t.slice(1),\n i = \"srcSet\".concat(n),\n u = \"src\".concat(n);\n return n && (!(i in e) && null != r && r.srcSet && (e[i] = r.srcSet), !(u in e) && null != r && r.srcSet && (e[u] = c(r))), e;\n }, {}) : {};\n},\n o = function o(e) {\n if (e && e.layout) {\n var _r = {},\n _t2 = n(e),\n _i = u(e),\n _c = a(e),\n _o = s(e);\n\n return _r[_t2] = l({}, e.images.fallback, _o, _c, \"fluid\" === _t2 ? {\n aspectRatio: _i\n } : {}, \"fixed\" === _t2 ? {\n width: e.width,\n height: e.height\n } : {}), _r;\n }\n\n return null;\n};\n\nfunction d(e) {\n if (e) {\n if (Array.isArray(e)) {\n var _ref = function (e) {\n var r = i(e);\n\n if (r) {\n var _i2 = n(r),\n _u2 = e.map(function (e) {\n if (t(e)) return e;\n var r = o(e);\n return l({}, r && r[_i2], null != e && e.media ? {\n media: e.media\n } : {});\n });\n\n return [_i2, _u2];\n }\n\n return [];\n }(e),\n _ref2 = _slicedToArray(_ref, 2),\n _r2 = _ref2[0],\n _u = _ref2[1];\n\n return _r2 ? _defineProperty({}, _r2, _u) : null;\n }\n\n return o(e);\n }\n\n return null;\n}\n\nvar f = function f(l) {\n var t = l.image,\n n = l.children,\n i = function (e, r) {\n if (null == e) return {};\n var l,\n t,\n n = {},\n i = Object.keys(e);\n\n for (t = 0; t < i.length; t++) {\n r.indexOf(l = i[t]) >= 0 || (n[l] = e[l]);\n }\n\n return n;\n }(l, [\"image\", \"children\"]),\n u = t && d(t);\n\n return u ? r.createElement(e, Object.assign({}, u, i), n) : r.createElement(\"div\", null, n);\n};\n\nexport { f as BgImage, o as convertSingleBgImage, d as convertToBgImage, s as getAllExtraSrcSets, u as getAspectRatio, n as getBgImageType, a as getPlaceholder, i as getSingleImage, c as getSrc, t as isString };","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import * as React from 'react';\nimport { graphql, useStaticQuery } from 'gatsby';\nimport tw, { styled } from 'twin.macro';\n\nimport MetaPurpleButton from '../MetaPurpleButton';\nimport { BgImage } from 'gbimage-bridge';\nimport { getImage } from 'gatsby-plugin-image';\n\nconst Container = styled(BgImage)`\n ${tw`\n flex flex-col justify-center items-center\n text-white px-10 md:px-52 pt-20 pb-52\n `}\n p {\n ${tw`w-1/2 text-center text-lg`}\n }\n`;\n\n/**\n * Footer section.\n *\n * @constructor\n */\nconst FooterSection = (): React.ReactElement => {\n const { footer, footerBg } = useStaticQuery(\n graphql`\n query {\n footer: markdownRemark(frontmatter: { slug: { eq: \"footer\" } }) {\n frontmatter {\n title\n button\n }\n rawMarkdownBody\n }\n footerBg: file(relativePath: { eq: \"footer-background.png\" }) {\n childImageSharp {\n gatsbyImageData(quality: 90, placeholder: NONE, layout: CONSTRAINED)\n }\n }\n }\n `,\n );\n const footerBgData = getImage(footerBg);\n return (\n <>\n \n

{footer.frontmatter.title}

\n

{footer.rawMarkdownBody}

\n {footer.frontmatter.button}\n
\n \n );\n};\n\nexport default FooterSection;\n","import * as React from 'react';\n\nimport Layout from '../components/Layout';\nimport Header from '../components/Header';\nimport FirstSection from '../components/firstSection';\nimport CiteSection from '../components/citeSection';\nimport WelcomeSection from '../components/welcomeSection';\nimport MultiSection from '../components/multiSection';\nimport FooterSection from '../components/footerSection';\n\nconst IndexPage = (): React.ReactElement => (\n \n
\n \n \n \n \n \n \n);\n\nexport default IndexPage;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _BackgroundUtils = _interopRequireDefault(require(\"./lib/BackgroundUtils\"));\n\nvar _HelperUtils = require(\"./lib/HelperUtils\");\n\nvar _ImageUtils = require(\"./lib/ImageUtils\");\n\nvar _ImageCache = require(\"./lib/ImageCache\");\n\nvar _ImageRef = require(\"./lib/ImageRef\");\n\nvar _ImageHandling = require(\"./lib/ImageHandling\");\n\nvar _StyleUtils = require(\"./lib/StyleUtils\");\n\nvar _StyleCreation = require(\"./lib/StyleCreation\");\n\nvar _IntersectionObserverUtils = require(\"./lib/IntersectionObserverUtils\");\n\nvar _SimpleUtils = require(\"./lib/SimpleUtils\");\n\nvar BackgroundImage = function (_React$Component) {\n (0, _inheritsLoose2.default)(BackgroundImage, _React$Component);\n\n function BackgroundImage(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n\n _this.intersectionListener = function () {\n var imageInCache = (0, _ImageCache.inImageCache)(_this.props);\n\n if (!_this.state.isVisible && typeof _this.props.onStartLoad === \"function\") {\n _this.props.onStartLoad({\n wasCached: imageInCache\n });\n }\n\n _this.imageRef = (0, _ImageRef.activatePictureRef)(_this.imageRef, _this.props, _this.selfRef);\n\n _this.setState(function (state) {\n return {\n isVisible: true,\n imageState: state.imageState + 1\n };\n }, function () {\n _this.setState(function (state) {\n return {\n imgLoaded: imageInCache,\n imgCached: (0, _ImageRef.hasActivatedPictureRefs)(_this.imageRef),\n imageState: state.imageState + 1\n };\n });\n });\n };\n\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var isVisible = true;\n var imgLoaded = false;\n var IOSupported = false;\n var fadeIn = convertedProps.fadeIn;\n var seenBefore = (0, _ImageCache.inImageCache)(convertedProps);\n\n if (!seenBefore && (0, _SimpleUtils.isBrowser)() && window.IntersectionObserver) {\n isVisible = false;\n IOSupported = true;\n }\n\n if (!(0, _SimpleUtils.isBrowser)()) {\n isVisible = false;\n }\n\n if (convertedProps.critical) {\n isVisible = true;\n IOSupported = false;\n }\n\n var hasNoScript = !(convertedProps.critical && !fadeIn) && !(0, _SimpleUtils.isBrowser)();\n var imageState = 0;\n\n var _fixClassName = (0, _StyleUtils.fixClassName)(convertedProps),\n currentClassNames = _fixClassName[0];\n\n _this.backgroundStyles = (0, _StyleUtils.presetBackgroundStyles)((0, _BackgroundUtils.default)(convertedProps.className));\n _this.handleImageLoaded = _this.handleImageLoaded.bind((0, _assertThisInitialized2.default)(_this));\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n _this.imageRef = (0, _ImageRef.createPictureRef)((0, _extends2.default)({}, convertedProps, {\n isVisible: isVisible\n }), _this.handleImageLoaded);\n _this.selfRef = null;\n _this.state = {\n isVisible: isVisible,\n imgLoaded: imgLoaded,\n IOSupported: IOSupported,\n fadeIn: fadeIn,\n hasNoScript: hasNoScript,\n seenBefore: seenBefore,\n imageState: imageState,\n currentClassNames: currentClassNames\n };\n return _this;\n }\n\n var _proto = BackgroundImage.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.backgroundStyles = (0, _StyleUtils.presetBackgroundStyles)((0, _BackgroundUtils.default)(this.props.className));\n\n if (this.state.isVisible && typeof this.props.onStartLoad === \"function\") {\n this.props.onStartLoad({\n wasCached: (0, _ImageCache.inImageCache)(this.props)\n });\n }\n\n if (this.props.critical || this.state.seenBefore) {\n if ((0, _ImageRef.imageReferenceCompleted)(this.imageRef, this.props)) {\n this.handleImageLoaded();\n }\n }\n\n var _fixClassName2 = (0, _StyleUtils.fixClassName)(this.props),\n currentClassNames = _fixClassName2[0];\n\n this.setState({\n currentClassNames: currentClassNames\n });\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this2 = this;\n\n if ((0, _ImageUtils.imagePropsChanged)(this.props, prevProps)) {\n var convertedProps = (0, _HelperUtils.convertProps)(this.props);\n var imageInCache = (0, _ImageCache.inImageCache)(convertedProps);\n\n var _fixClassName3 = (0, _StyleUtils.fixClassName)(convertedProps),\n currentClassNames = _fixClassName3[0];\n\n this.setState({\n isVisible: imageInCache || convertedProps.critical,\n imgLoaded: imageInCache,\n seenBefore: imageInCache,\n currentClassNames: currentClassNames\n }, function () {\n _this2.bgImage = (0, _ImageUtils.getCurrentFromData)({\n data: _this2.imageRef,\n propName: \"currentSrc\",\n returnArray: true\n }) || (0, _ImageUtils.getCurrentFromData)({\n data: _this2.imageRef,\n propName: \"src\",\n returnArray: true\n });\n _this2.imageRef = (0, _ImageRef.createPictureRef)((0, _extends2.default)({}, convertedProps, {\n isVisible: _this2.state.isVisible\n }), _this2.handleImageLoaded);\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.imageRef) {\n if (Array.isArray(this.imageRef)) {\n this.imageRef.forEach(function (currentImageRef) {\n if (!!currentImageRef && !(0, _SimpleUtils.isString)(currentImageRef)) {\n currentImageRef.onload = null;\n }\n });\n } else {\n this.imageRef.onload = null;\n }\n }\n\n if (this.cleanUpListeners) {\n this.cleanUpListeners();\n }\n };\n\n _proto.handleRef = function handleRef(ref) {\n this.selfRef = ref;\n\n if (this.state.IOSupported && ref) {\n this.cleanUpListeners = (0, _IntersectionObserverUtils.listenToIntersections)(ref, this.intersectionListener, this.props.rootMargin);\n }\n };\n\n _proto.handleImageLoaded = function handleImageLoaded() {\n (0, _ImageCache.activateCacheForImage)(this.props);\n this.setState(function (state) {\n return {\n imgLoaded: true,\n imageState: state.imageState + 1\n };\n });\n\n if (this.state.seenBefore) {\n this.setState({\n fadeIn: false\n });\n }\n\n if (this.props.onLoad) {\n this.props.onLoad();\n }\n };\n\n _proto.render = function render() {\n var _fixOpacity = (0, _StyleUtils.fixOpacity)((0, _HelperUtils.convertProps)(this.props), this.props.preserveStackingContext),\n className = _fixOpacity.className,\n _fixOpacity$style = _fixOpacity.style,\n style = _fixOpacity$style === void 0 ? {} : _fixOpacity$style,\n fluid = _fixOpacity.fluid,\n fixed = _fixOpacity.fixed,\n backgroundColor = _fixOpacity.backgroundColor,\n durationFadeIn = _fixOpacity.durationFadeIn,\n Tag = _fixOpacity.Tag,\n children = _fixOpacity.children,\n keepStatic = _fixOpacity.keepStatic,\n props = (0, _objectWithoutPropertiesLoose2.default)(_fixOpacity, [\"className\", \"style\", \"fluid\", \"fixed\", \"backgroundColor\", \"durationFadeIn\", \"Tag\", \"children\", \"keepStatic\"]);\n\n var remainingProps = (0, _HelperUtils.stripRemainingProps)(props);\n var bgColor = typeof backgroundColor === \"boolean\" ? \"lightgray\" : typeof backgroundColor !== \"undefined\" ? backgroundColor : \"\";\n var shouldFadeIn = this.state.fadeIn === true && !this.state.imgCached || this.props.fadeIn === \"soft\";\n var transitionDelay = shouldFadeIn ? durationFadeIn / 2 + \"ms\" : \"none\";\n var divStyle = (0, _extends2.default)({\n position: \"relative\"\n }, style);\n if (!this.props.preserveStackingContext) divStyle.opacity = 0.99;\n var image = (0, _ImageUtils.getCurrentSrcData)({\n fluid: fluid,\n fixed: fixed,\n returnArray: true\n });\n var noScriptImageData = (0, _ImageUtils.getCurrentSrcData)({\n fluid: fluid,\n fixed: fixed\n }) || {};\n\n if (fluid || fixed) {\n if (fixed) {\n divStyle.width = style.width || image.width;\n divStyle.height = style.height || image.height;\n divStyle.display = \"inline-block\";\n\n if (style.display === \"inherit\") {\n delete divStyle.display;\n }\n }\n } else if (keepStatic) {\n noScriptImageData.srcSet = '';\n } else {\n return null;\n }\n\n var newImageSettings = (0, _ImageHandling.switchImageSettings)({\n image: image,\n bgImage: this.bgImage,\n imageRef: this.imageRef,\n state: this.state\n });\n this.bgImage = newImageSettings.nextImageArray || newImageSettings.nextImage || this.bgImage;\n var pseudoStyles = (0, _StyleCreation.createPseudoStyles)((0, _extends2.default)({\n className: this.state.currentClassNames,\n transitionDelay: transitionDelay,\n bgColor: bgColor,\n backgroundStyles: this.backgroundStyles,\n style: style,\n fadeIn: shouldFadeIn\n }, newImageSettings, {\n originalData: fluid || fixed\n }));\n var noScriptPseudoStyles = (0, _StyleCreation.createNoScriptStyles)({\n image: image,\n bgColor: bgColor,\n className: this.state.currentClassNames,\n backgroundStyles: this.backgroundStyles,\n style: style\n });\n var componentKey = \"\" + (fluid ? \"fluid\" : \"\") + (fixed ? \"fixed\" : \"\") + \"-\" + JSON.stringify(noScriptImageData.srcSet);\n var currentStyles = (0, _extends2.default)({}, this.backgroundStyles, divStyle);\n return _react.default.createElement(Tag, (0, _extends2.default)({\n className: this.state.currentClassNames,\n style: currentStyles,\n ref: this.handleRef,\n key: componentKey\n }, remainingProps), _react.default.createElement(\"style\", {\n dangerouslySetInnerHTML: {\n __html: pseudoStyles\n }\n }), this.state.hasNoScript && _react.default.createElement(\"noscript\", null, _react.default.createElement(\"style\", {\n dangerouslySetInnerHTML: {\n __html: noScriptPseudoStyles\n }\n })), children);\n };\n\n return BackgroundImage;\n}(_react.default.Component);\n\nBackgroundImage.defaultProps = {\n critical: false,\n fadeIn: true,\n durationFadeIn: 500,\n Tag: \"div\",\n preserveStackingContext: false,\n rootMargin: \"200px\",\n keepStatic: false\n};\n\nvar fixedObject = _propTypes.default.shape({\n width: _propTypes.default.number.isRequired,\n height: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n srcAvif: _propTypes.default.string,\n srcSetAvif: _propTypes.default.string,\n media: _propTypes.default.string\n});\n\nvar fluidObject = _propTypes.default.shape({\n aspectRatio: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n sizes: _propTypes.default.string,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n srcAvif: _propTypes.default.string,\n srcSetAvif: _propTypes.default.string,\n media: _propTypes.default.string\n});\n\nBackgroundImage.propTypes = {\n fixed: _propTypes.default.oneOfType([fixedObject, _propTypes.default.arrayOf(fixedObject), _propTypes.default.arrayOf(_propTypes.default.oneOfType([fixedObject, _propTypes.default.string]))]),\n fluid: _propTypes.default.oneOfType([fluidObject, _propTypes.default.arrayOf(fluidObject), _propTypes.default.arrayOf(_propTypes.default.oneOfType([fluidObject, _propTypes.default.string]))]),\n fadeIn: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n durationFadeIn: _propTypes.default.number,\n className: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]),\n critical: _propTypes.default.bool,\n crossOrigin: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n style: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.array]),\n backgroundColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n onLoad: _propTypes.default.func,\n onError: _propTypes.default.func,\n onStartLoad: _propTypes.default.func,\n Tag: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]),\n preserveStackingContext: _propTypes.default.bool,\n rootMargin: _propTypes.default.string,\n keepStatic: _propTypes.default.bool\n};\nvar _default = BackgroundImage;\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.getBackgroundStylesForSingleClass = exports.getStyleRules = exports.getStyleRulesForClassName = void 0;\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar getStyleRulesForClassName = function getStyleRulesForClassName(className) {\n var styleSheets = (0, _SimpleUtils.isBrowser)() ? window.document.styleSheets : [];\n\n for (var i = 0; i < styleSheets.length; i++) {\n var classes = void 0;\n\n try {\n classes = typeof styleSheets[i].rules !== 'undefined' ? styleSheets[i].rules : typeof styleSheets[i].cssRules !== 'undefined' ? styleSheets[i].cssRules : '';\n } catch (e) {}\n\n if (classes) {\n var foundClass = Array.prototype.slice.call(classes).reduce(function (foundAcc, styleRule) {\n if (styleRule.selectorText === className) {\n foundAcc.push(styleRule);\n }\n\n return foundAcc;\n }, []);\n\n if (foundClass.length) {\n return foundClass;\n }\n }\n }\n\n return [];\n};\n\nexports.getStyleRulesForClassName = getStyleRulesForClassName;\n\nvar getStyleRules = function getStyleRules(cssStyleRules) {\n var styles = {};\n\n if (cssStyleRules.length > 0 && typeof cssStyleRules[0].style !== 'undefined') {\n var constructorName = cssStyleRules[0].style.constructor.name || cssStyleRules[0].style.constructor.toString();\n\n switch (constructorName) {\n case 'CSS2Properties':\n case '[object MSStyleCSSProperties]':\n Object.values(cssStyleRules[0].style).forEach(function (prop) {\n styles[(0, _SimpleUtils.toCamelCase)(prop)] = cssStyleRules[0].style[prop];\n });\n break;\n\n case 'CSSStyleDeclaration':\n styles = cssStyleRules[0].style;\n break;\n\n default:\n console.error('Unknown style object prototype');\n break;\n }\n }\n\n return styles;\n};\n\nexports.getStyleRules = getStyleRules;\n\nvar getBackgroundStylesForSingleClass = function getBackgroundStylesForSingleClass(className) {\n if (className && (0, _SimpleUtils.isString)(className)) {\n var cssStyleRules = getStyleRulesForClassName(\".\" + className);\n\n if ((cssStyleRules === null || cssStyleRules === void 0 ? void 0 : cssStyleRules.length) > 0 && typeof cssStyleRules[0].style !== 'undefined') {\n return Object.keys(getStyleRules(cssStyleRules)).filter(function (key) {\n return key.indexOf('background') === 0 && cssStyleRules[0].style[key] !== '';\n }).reduce(function (newData, key) {\n newData[(0, _SimpleUtils.toCamelCase)(key)] = cssStyleRules[0].style[key];\n return newData;\n }, {});\n }\n }\n\n return {};\n};\n\nexports.getBackgroundStylesForSingleClass = getBackgroundStylesForSingleClass;\n\nvar getBackgroundStyles = function getBackgroundStyles(className) {\n if ((0, _SimpleUtils.isBrowser)()) {\n var classes = (0, _SimpleUtils.stringToArray)(className);\n\n if (classes instanceof Array) {\n var classObjects = [];\n classes.forEach(function (item) {\n return classObjects.push(getBackgroundStylesForSingleClass(item));\n });\n return Object.assign.apply(Object, classObjects);\n }\n\n return getBackgroundStylesForSingleClass(className);\n }\n\n return {};\n};\n\nvar _default = getBackgroundStyles;\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.resetComponentClassCache = exports.activateCacheForComponentClass = exports.inComponentClassCache = void 0;\nvar componentClassCache = Object.create({});\n\nvar inComponentClassCache = function inComponentClassCache(className) {\n return componentClassCache[className] || false;\n};\n\nexports.inComponentClassCache = inComponentClassCache;\n\nvar activateCacheForComponentClass = function activateCacheForComponentClass(className) {\n if (className) {\n componentClassCache[className] = true;\n }\n};\n\nexports.activateCacheForComponentClass = activateCacheForComponentClass;\n\nvar resetComponentClassCache = function resetComponentClassCache() {\n for (var className in componentClassCache) {\n delete componentClassCache[className];\n }\n};\n\nexports.resetComponentClassCache = resetComponentClassCache;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.convertProps = exports.stripRemainingProps = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _filterInvalidDomProps = _interopRequireDefault(require(\"filter-invalid-dom-props\"));\n\nvar _MediaUtils = require(\"./MediaUtils\");\n\nvar stripRemainingProps = function stripRemainingProps(props) {\n return (0, _filterInvalidDomProps.default)(props);\n};\n\nexports.stripRemainingProps = stripRemainingProps;\n\nvar convertProps = function convertProps(props) {\n var convertedProps = (0, _extends2.default)({}, props);\n var fixed = convertedProps.fixed,\n fluid = convertedProps.fluid;\n\n if (fluid && (0, _MediaUtils.hasArtDirectionSupport)(props, 'fluid')) {\n convertedProps.fluid = (0, _MediaUtils.groupByMedia)(convertedProps.fluid);\n }\n\n if (fixed && (0, _MediaUtils.hasArtDirectionSupport)(props, 'fixed')) {\n convertedProps.fixed = (0, _MediaUtils.groupByMedia)(convertedProps.fixed);\n }\n\n return convertedProps;\n};\n\nexports.convertProps = convertProps;","\"use strict\";\n\nexports.__esModule = true;\nexports.resetImageCache = exports.activateCacheForMultipleImages = exports.activateCacheForImage = exports.allInImageCache = exports.inImageCache = void 0;\n\nvar _HelperUtils = require(\"./HelperUtils\");\n\nvar _MediaUtils = require(\"./MediaUtils\");\n\nvar _ImageUtils = require(\"./ImageUtils\");\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar imageCache = Object.create({});\n\nvar inImageCache = function inImageCache(props, index, isLoop) {\n if (index === void 0) {\n index = 0;\n }\n\n if (isLoop === void 0) {\n isLoop = false;\n }\n\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var isImageStack = (0, _ImageUtils.hasImageArray)(convertedProps) && !(0, _MediaUtils.hasArtDirectionArray)(convertedProps);\n\n if (isImageStack && !isLoop) {\n return allInImageCache(props);\n }\n\n var src = isImageStack ? (0, _ImageUtils.getSelectedImage)(convertedProps, index) : (0, _ImageUtils.getImageSrcKey)(convertedProps);\n\n if ((0, _SimpleUtils.isObject)(src)) {\n var objectSrc = (0, _ImageUtils.getImageSrcKey)({\n fluid: src,\n fixed: src\n });\n return imageCache[objectSrc] || false;\n }\n\n return imageCache[src] || false;\n};\n\nexports.inImageCache = inImageCache;\n\nvar allInImageCache = function allInImageCache(props) {\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var imageStack = convertedProps.fluid || convertedProps.fixed;\n return imageStack.every(function (imageData, index) {\n return inImageCache(convertedProps, index, true);\n });\n};\n\nexports.allInImageCache = allInImageCache;\n\nvar activateCacheForImage = function activateCacheForImage(props, index, isLoop) {\n if (index === void 0) {\n index = 0;\n }\n\n if (isLoop === void 0) {\n isLoop = false;\n }\n\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var isImageStack = (0, _ImageUtils.hasImageArray)(convertedProps) && !(0, _MediaUtils.hasArtDirectionArray)(convertedProps);\n\n if (isImageStack && !isLoop) {\n return activateCacheForMultipleImages(props);\n }\n\n var src = isImageStack ? (0, _ImageUtils.getSelectedImage)(convertedProps, index) : (0, _ImageUtils.getImageSrcKey)(convertedProps);\n\n if (src) {\n if ((0, _SimpleUtils.isObject)(src)) {\n var objectSrc = (0, _ImageUtils.getImageSrcKey)({\n fluid: src,\n fixed: src\n });\n imageCache[objectSrc] = true;\n } else {\n imageCache[src] = true;\n }\n }\n};\n\nexports.activateCacheForImage = activateCacheForImage;\n\nvar activateCacheForMultipleImages = function activateCacheForMultipleImages(props) {\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var imageStack = convertedProps.fluid || convertedProps.fixed;\n imageStack.forEach(function (imageData, index) {\n return activateCacheForImage(convertedProps, index, true);\n });\n};\n\nexports.activateCacheForMultipleImages = activateCacheForMultipleImages;\n\nvar resetImageCache = function resetImageCache() {\n for (var prop in imageCache) {\n delete imageCache[prop];\n }\n};\n\nexports.resetImageCache = resetImageCache;","\"use strict\";\n\nexports.__esModule = true;\nexports.switchImageSettings = void 0;\n\nvar _ImageUtils = require(\"./ImageUtils\");\n\nvar _MediaUtils = require(\"./MediaUtils\");\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar switchImageSettings = function switchImageSettings(_ref) {\n var image = _ref.image,\n bgImage = _ref.bgImage,\n imageRef = _ref.imageRef,\n state = _ref.state;\n var currentSources = (0, _ImageUtils.getCurrentFromData)({\n data: imageRef,\n propName: \"currentSrc\"\n });\n var returnArray = Array.isArray(image) && !(0, _MediaUtils.hasArtDirectionArray)({\n fluid: image\n });\n var lastImage = Array.isArray(bgImage) ? (0, _SimpleUtils.filteredJoin)(bgImage) : bgImage;\n var nextImage;\n var nextImageArray;\n var finalImage = returnArray && state.seenBefore && !!currentSources;\n\n if (returnArray) {\n if (!currentSources) {\n nextImage = (0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"tracedSVG\",\n returnArray: returnArray\n });\n nextImage = (0, _SimpleUtils.combineArray)((0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"base64\",\n returnArray: returnArray\n }), nextImage);\n }\n\n nextImage = (0, _SimpleUtils.combineArray)((0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"CSS_STRING\",\n addUrl: false,\n returnArray: returnArray\n }), nextImage);\n\n if ((state.imgLoaded || !!currentSources) && state.isVisible) {\n if (currentSources) {\n nextImage = (0, _SimpleUtils.combineArray)((0, _ImageUtils.getCurrentFromData)({\n data: imageRef,\n propName: \"currentSrc\",\n returnArray: returnArray\n }), nextImage);\n finalImage = true;\n } else {\n nextImage = (0, _SimpleUtils.combineArray)((0, _ImageUtils.getCurrentFromData)({\n data: imageRef,\n propName: \"src\",\n returnArray: returnArray\n }), nextImage);\n finalImage = true;\n }\n }\n\n nextImage = (0, _SimpleUtils.combineArray)(nextImage, bgImage);\n var dummyArray = (0, _ImageUtils.createDummyImageArray)(image.length);\n nextImage = (0, _SimpleUtils.combineArray)(nextImage, dummyArray);\n nextImageArray = nextImage;\n nextImage = (0, _SimpleUtils.filteredJoin)(nextImage);\n } else {\n nextImage = \"\";\n nextImage = (0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"tracedSVG\"\n }) || (0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"base64\"\n });\n\n if (state.imgLoaded && state.isVisible) {\n nextImage = currentSources;\n finalImage = true;\n }\n }\n\n var afterOpacity = state.imageState % 2;\n\n if (!returnArray && nextImage === \"\" && state.imgLoaded && state.isVisible && imageRef && !imageRef.currentSrc) {\n nextImage = (0, _ImageUtils.getCurrentFromData)({\n data: imageRef,\n propName: \"src\",\n checkLoaded: false\n });\n finalImage = true;\n }\n\n if (!nextImage) nextImage = lastImage;\n var newImageSettings = {\n lastImage: lastImage,\n nextImage: nextImage,\n afterOpacity: afterOpacity,\n finalImage: finalImage\n };\n if (nextImageArray) newImageSettings.nextImageArray = nextImageArray;\n return newImageSettings;\n};\n\nexports.switchImageSettings = switchImageSettings;","\"use strict\";\n\nexports.__esModule = true;\nexports.imageReferenceCompleted = exports.hasPictureRef = exports.hasActivatedPictureRefs = exports.activateMultiplePictureRefs = exports.activatePictureRef = exports.createMultiplePictureRefs = exports.createPictureRef = void 0;\n\nvar _HelperUtils = require(\"./HelperUtils\");\n\nvar _ImageUtils = require(\"./ImageUtils\");\n\nvar _MediaUtils = require(\"./MediaUtils\");\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar _ImageCache = require(\"./ImageCache\");\n\nvar createPictureRef = function createPictureRef(props, onLoad, index, isLoop) {\n if (isLoop === void 0) {\n isLoop = false;\n }\n\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n\n if ((0, _SimpleUtils.isBrowser)() && (typeof convertedProps.fluid !== \"undefined\" || typeof convertedProps.fixed !== \"undefined\")) {\n var isImageStack = (0, _ImageUtils.hasImageArray)(convertedProps) && !(0, _MediaUtils.hasArtDirectionArray)(convertedProps);\n\n if (isImageStack && !isLoop) {\n return createMultiplePictureRefs(props, onLoad);\n }\n\n var img = new Image();\n\n img.onload = function () {\n return onLoad();\n };\n\n if (!img.complete && typeof convertedProps.onLoad === \"function\") {\n img.addEventListener('load', convertedProps.onLoad);\n }\n\n if (typeof convertedProps.onError === \"function\") {\n img.addEventListener('error', convertedProps.onError);\n }\n\n if (convertedProps.crossOrigin) {\n img.crossOrigin = convertedProps.crossOrigin;\n }\n\n if ((convertedProps.critical || convertedProps.isVisible) && !isLoop) {\n return activatePictureRef(img, convertedProps, index, isLoop);\n }\n\n return img;\n }\n\n return null;\n};\n\nexports.createPictureRef = createPictureRef;\n\nvar createMultiplePictureRefs = function createMultiplePictureRefs(props, onLoad) {\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var imageStack = convertedProps.fluid || convertedProps.fixed;\n var imageRefs = imageStack.map(function (imageData, index) {\n return createPictureRef(convertedProps, onLoad, index, true);\n });\n\n if (convertedProps.critical || convertedProps.isVisible) {\n return activatePictureRef(imageRefs, convertedProps);\n }\n\n return imageRefs;\n};\n\nexports.createMultiplePictureRefs = createMultiplePictureRefs;\n\nvar activatePictureRef = function activatePictureRef(imageRef, props, selfRef, index, isLoop) {\n if (selfRef === void 0) {\n selfRef = null;\n }\n\n if (index === void 0) {\n index = 0;\n }\n\n if (isLoop === void 0) {\n isLoop = false;\n }\n\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n\n if ((0, _SimpleUtils.isBrowser)() && (typeof convertedProps.fluid !== \"undefined\" || typeof convertedProps.fixed !== \"undefined\")) {\n var isImageStack = (0, _ImageUtils.hasImageArray)(convertedProps) && !(0, _MediaUtils.hasArtDirectionArray)(convertedProps);\n\n if (isImageStack && !isLoop) {\n return activateMultiplePictureRefs(imageRef, props, selfRef);\n }\n\n var bodyClone = document.createElement('body');\n var imageData = isImageStack ? (0, _ImageUtils.getSelectedImage)(convertedProps, index) : (0, _ImageUtils.getCurrentSrcData)(convertedProps);\n\n if (!imageData) {\n return null;\n }\n\n if ((0, _SimpleUtils.isString)(imageData)) {\n return imageData;\n }\n\n if (selfRef) {\n imageRef.width = selfRef.offsetWidth;\n imageRef.height = selfRef.offsetHeight;\n }\n\n if ((0, _ImageUtils.hasPictureElement)()) {\n var pic = document.createElement('picture');\n\n if (selfRef) {\n pic.width = imageRef.width;\n pic.height = imageRef.height;\n }\n\n if ((0, _MediaUtils.hasArtDirectionArray)(convertedProps)) {\n var sources = (0, _MediaUtils.createArtDirectionSources)(convertedProps).reverse();\n sources.forEach(function (currentSource) {\n return pic.appendChild(currentSource);\n });\n }\n\n var sourcesAvif = (0, _MediaUtils.createSourceElementForSrcSet)(imageData, 'avif');\n sourcesAvif && pic.appendChild(sourcesAvif);\n var sourcesWebp = (0, _MediaUtils.createSourceElementForSrcSet)(imageData, 'webp');\n sourcesWebp && pic.appendChild(sourcesWebp);\n pic.appendChild(imageRef);\n bodyClone.appendChild(pic);\n }\n\n imageRef.sizes = imageData.sizes || \"\";\n imageRef.srcset = imageData.srcSet || \"\";\n imageRef.src = imageData.src || \"\";\n return imageRef;\n }\n\n return null;\n};\n\nexports.activatePictureRef = activatePictureRef;\n\nvar activateMultiplePictureRefs = function activateMultiplePictureRefs(imageRefs, props, selfRef) {\n return imageRefs.map(function (imageRef, index) {\n return activatePictureRef(imageRef, props, selfRef, index, true);\n });\n};\n\nexports.activateMultiplePictureRefs = activateMultiplePictureRefs;\n\nvar hasActivatedPictureRefs = function hasActivatedPictureRefs(imageRefs) {\n return Array.isArray(imageRefs) ? imageRefs.every(function (imageRef) {\n return hasPictureRef(imageRef);\n }) : hasPictureRef(imageRefs);\n};\n\nexports.hasActivatedPictureRefs = hasActivatedPictureRefs;\n\nvar hasPictureRef = function hasPictureRef(imageRef) {\n return (0, _SimpleUtils.isString)(imageRef) || !!imageRef && !!imageRef.currentSrc;\n};\n\nexports.hasPictureRef = hasPictureRef;\n\nvar imageReferenceCompleted = function imageReferenceCompleted(imageRef, props) {\n return imageRef ? Array.isArray(imageRef) ? imageRef.every(function (singleImageRef) {\n return (0, _ImageUtils.imageLoaded)(singleImageRef);\n }) || (0, _ImageCache.inImageCache)(props) : (0, _ImageUtils.imageLoaded)(imageRef) || (0, _ImageCache.inImageCache)(props) : (0, _SimpleUtils.isString)(imageRef);\n};\n\nexports.imageReferenceCompleted = imageReferenceCompleted;","\"use strict\";\n\nexports.__esModule = true;\nexports.imageLoaded = exports.createDummyImageArray = exports.imageArrayPropsChanged = exports.imagePropsChanged = exports.hasImageUrl = exports.isBase64 = exports.getUrlString = exports.getSelectedImage = exports.getCurrentSrcData = exports.getImageSrcKey = exports.getCurrentFromData = exports.hasImageArray = exports.hasPictureElement = void 0;\n\nvar _MediaUtils = require(\"./MediaUtils\");\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar hasPictureElement = function hasPictureElement() {\n return typeof HTMLPictureElement !== \"undefined\" || (0, _SimpleUtils.isBrowser)();\n};\n\nexports.hasPictureElement = hasPictureElement;\n\nvar hasImageArray = function hasImageArray(props) {\n return Boolean(props.fluid && Array.isArray(props.fluid) || props.fixed && Array.isArray(props.fixed));\n};\n\nexports.hasImageArray = hasImageArray;\n\nvar getCurrentFromData = function getCurrentFromData(_ref) {\n var data = _ref.data,\n propName = _ref.propName,\n _ref$addUrl = _ref.addUrl,\n addUrl = _ref$addUrl === void 0 ? true : _ref$addUrl,\n _ref$returnArray = _ref.returnArray,\n returnArray = _ref$returnArray === void 0 ? false : _ref$returnArray,\n _ref$checkLoaded = _ref.checkLoaded,\n checkLoaded = _ref$checkLoaded === void 0 ? true : _ref$checkLoaded;\n if (!data || !propName) return \"\";\n var tracedSVG = propName === \"tracedSVG\";\n\n if (Array.isArray(data) && !(0, _MediaUtils.hasArtDirectionArray)({\n fluid: data\n })) {\n var imageString = data.map(function (dataElement) {\n if (propName === \"currentSrc\" || propName === 'src') {\n return checkLoaded ? imageLoaded(dataElement) && dataElement[propName] || \"\" : dataElement[propName];\n }\n\n if (propName === \"CSS_STRING\" && (0, _SimpleUtils.isString)(dataElement)) {\n return dataElement;\n }\n\n return (0, _SimpleUtils.isString)(dataElement) ? dataElement : dataElement && propName in dataElement ? dataElement[propName] : \"\";\n });\n return getUrlString({\n imageString: imageString,\n tracedSVG: tracedSVG,\n addUrl: addUrl,\n returnArray: returnArray\n });\n }\n\n if ((0, _MediaUtils.hasArtDirectionArray)({\n fluid: data\n }) && (propName === \"currentSrc\" || propName === \"src\" || propName === \"base64\" || tracedSVG)) {\n var currentData = getCurrentSrcData({\n fluid: data\n });\n return propName in currentData ? getUrlString({\n imageString: currentData[propName],\n tracedSVG: tracedSVG,\n addUrl: addUrl\n }) : \"\";\n }\n\n if (typeof data !== 'object') {\n return '';\n }\n\n if ((propName === \"currentSrc\" || propName === 'src') && propName in data) {\n return getUrlString({\n imageString: checkLoaded ? imageLoaded(data) && data[propName] || \"\" : data[propName],\n addUrl: addUrl\n });\n }\n\n return propName in data ? getUrlString({\n imageString: data[propName],\n tracedSVG: tracedSVG,\n addUrl: addUrl\n }) : \"\";\n};\n\nexports.getCurrentFromData = getCurrentFromData;\n\nvar getImageSrcKey = function getImageSrcKey(_ref2) {\n var fluid = _ref2.fluid,\n fixed = _ref2.fixed;\n var data = getCurrentSrcData({\n fluid: fluid,\n fixed: fixed\n });\n return data ? data.src || null : null;\n};\n\nexports.getImageSrcKey = getImageSrcKey;\n\nvar getCurrentSrcData = function getCurrentSrcData(_ref3, index) {\n var fluid = _ref3.fluid,\n fixed = _ref3.fixed,\n returnArray = _ref3.returnArray;\n\n if (index === void 0) {\n index = 0;\n }\n\n var currentData = fluid || fixed;\n\n if (hasImageArray({\n fluid: fluid,\n fixed: fixed\n })) {\n if (returnArray) {\n return currentData;\n }\n\n if ((0, _SimpleUtils.isBrowser)() && (0, _MediaUtils.hasArtDirectionArray)({\n fluid: fluid,\n fixed: fixed\n })) {\n var mediaData = currentData.slice().reverse();\n var foundMedia = mediaData.findIndex(_MediaUtils.matchesMedia);\n\n if (foundMedia !== -1) {\n return mediaData[foundMedia];\n }\n }\n\n return currentData[index];\n }\n\n return currentData;\n};\n\nexports.getCurrentSrcData = getCurrentSrcData;\n\nvar getSelectedImage = function getSelectedImage(_ref4, index) {\n var fluid = _ref4.fluid,\n fixed = _ref4.fixed;\n\n if (index === void 0) {\n index = 0;\n }\n\n var currentData = fluid || fixed;\n\n if (hasImageArray({\n fluid: fluid,\n fixed: fixed\n })) {\n return currentData[index] || currentData[0];\n }\n\n return currentData;\n};\n\nexports.getSelectedImage = getSelectedImage;\n\nvar getUrlString = function getUrlString(_ref5) {\n var imageString = _ref5.imageString,\n _ref5$tracedSVG = _ref5.tracedSVG,\n tracedSVG = _ref5$tracedSVG === void 0 ? false : _ref5$tracedSVG,\n _ref5$addUrl = _ref5.addUrl,\n addUrl = _ref5$addUrl === void 0 ? true : _ref5$addUrl,\n _ref5$returnArray = _ref5.returnArray,\n returnArray = _ref5$returnArray === void 0 ? false : _ref5$returnArray,\n _ref5$hasImageUrls = _ref5.hasImageUrls,\n hasImageUrls = _ref5$hasImageUrls === void 0 ? false : _ref5$hasImageUrls;\n\n if (Array.isArray(imageString)) {\n var stringArray = imageString.map(function (currentString) {\n if (currentString) {\n var _base = isBase64(currentString);\n\n var _imageUrl = hasImageUrls || hasImageUrl(currentString);\n\n var currentReturnString = currentString && tracedSVG ? \"\\\"\" + currentString + \"\\\"\" : currentString && !_base && !tracedSVG && _imageUrl ? \"'\" + currentString + \"'\" : currentString;\n return addUrl && currentString ? \"url(\" + currentReturnString + \")\" : currentReturnString;\n }\n\n return currentString;\n });\n return returnArray ? stringArray : (0, _SimpleUtils.filteredJoin)(stringArray);\n }\n\n var base64 = isBase64(imageString);\n var imageUrl = hasImageUrls || hasImageUrl(imageString);\n var returnString = imageString && tracedSVG ? \"\\\"\" + imageString + \"\\\"\" : imageString && !base64 && !tracedSVG && imageUrl ? \"'\" + imageString + \"'\" : imageString;\n return imageString ? addUrl ? \"url(\" + returnString + \")\" : returnString : \"\";\n};\n\nexports.getUrlString = getUrlString;\n\nvar isBase64 = function isBase64(base64String) {\n return (0, _SimpleUtils.isString)(base64String) && base64String.indexOf(\"base64\") !== -1;\n};\n\nexports.isBase64 = isBase64;\n\nvar hasImageUrl = function hasImageUrl(imageString) {\n return (0, _SimpleUtils.isString)(imageString) && imageString.substr(0, 4) === \"http\";\n};\n\nexports.hasImageUrl = hasImageUrl;\n\nvar imagePropsChanged = function imagePropsChanged(props, prevProps) {\n return props.fluid && !prevProps.fluid || props.fixed && !prevProps.fixed || imageArrayPropsChanged(props, prevProps) || props.fluid && prevProps.fluid && props.fluid.src !== prevProps.fluid.src || props.fixed && prevProps.fixed && props.fixed.src !== prevProps.fixed.src;\n};\n\nexports.imagePropsChanged = imagePropsChanged;\n\nvar imageArrayPropsChanged = function imageArrayPropsChanged(props, prevProps) {\n var isPropsFluidArray = Array.isArray(props.fluid);\n var isPrevPropsFluidArray = Array.isArray(prevProps.fluid);\n var isPropsFixedArray = Array.isArray(props.fixed);\n var isPrevPropsFixedArray = Array.isArray(prevProps.fixed);\n\n if (isPropsFluidArray && !isPrevPropsFluidArray || isPropsFixedArray && !isPrevPropsFixedArray || !isPropsFluidArray && isPrevPropsFluidArray || !isPropsFixedArray && isPrevPropsFixedArray) {\n return true;\n }\n\n if (isPropsFluidArray && isPrevPropsFluidArray) {\n if (props.fluid.length === prevProps.fluid.length) {\n return props.fluid.some(function (image, index) {\n return image.src !== prevProps.fluid[index].src;\n });\n }\n\n return true;\n }\n\n if (isPropsFixedArray && isPrevPropsFixedArray) {\n if (props.fixed.length === prevProps.fixed.length) {\n return props.fixed.some(function (image, index) {\n return image.src !== prevProps.fixed[index].src;\n });\n }\n\n return true;\n }\n};\n\nexports.imageArrayPropsChanged = imageArrayPropsChanged;\n\nvar createDummyImageArray = function createDummyImageArray(length) {\n var DUMMY_IMG = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n var dummyImageURI = getUrlString({\n imageString: DUMMY_IMG\n });\n return Array(length).fill(dummyImageURI);\n};\n\nexports.createDummyImageArray = createDummyImageArray;\n\nvar imageLoaded = function imageLoaded(imageRef) {\n return imageRef ? (0, _SimpleUtils.isString)(imageRef) || imageRef.complete && imageRef.naturalWidth !== 0 && imageRef.naturalHeight !== 0 : false;\n};\n\nexports.imageLoaded = imageLoaded;","\"use strict\";\n\nexports.__esModule = true;\nexports.listenToIntersections = exports.getIO = exports.callbackIO = void 0;\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar io;\nvar listeners = new WeakMap();\n\nvar callbackIO = function callbackIO(entries) {\n entries.forEach(function (entry) {\n if (listeners.has(entry.target)) {\n var callback = listeners.get(entry.target);\n\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(entry.target);\n listeners.delete(entry.target);\n callback();\n }\n }\n });\n};\n\nexports.callbackIO = callbackIO;\n\nvar getIO = function getIO(rootMargin) {\n if (typeof io === \"undefined\" && (0, _SimpleUtils.isBrowser)() && window.IntersectionObserver) {\n io = new window.IntersectionObserver(callbackIO, {\n rootMargin: rootMargin\n });\n }\n\n return io;\n};\n\nexports.getIO = getIO;\n\nvar listenToIntersections = function listenToIntersections(element, callback, rootMargin) {\n if (rootMargin === void 0) {\n rootMargin = \"200px\";\n }\n\n var observer = getIO(rootMargin);\n\n if (observer) {\n observer.observe(element);\n listeners.set(element, callback);\n return function () {\n observer.unobserve(element);\n listeners.delete(element);\n };\n }\n\n return function () {};\n};\n\nexports.listenToIntersections = listenToIntersections;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.matchesMedia = exports.hasArtDirectionArray = exports.hasArtDirectionSupport = exports.createArtDirectionSources = exports.createSourceElementForSrcSet = exports.groupByMedia = void 0;\n\nvar _sortMediaQueries = _interopRequireDefault(require(\"sort-media-queries\"));\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar groupByMedia = function groupByMedia(imageVariants) {\n var without = [];\n var sortedVariants = (0, _sortMediaQueries.default)(imageVariants, 'media');\n sortedVariants.forEach(function (variant) {\n return !variant.media && without.push(variant);\n });\n\n if (without.length > 1 && process.env.NODE_ENV !== \"production\") {\n console.warn(\"We've found \" + without.length + \" sources without a media property. They might be ignored by the browser, see: https://www.gatsbyjs.org/packages/gatsby-image/#art-directing-multiple-images\");\n }\n\n return sortedVariants;\n};\n\nexports.groupByMedia = groupByMedia;\n\nvar createSourceElementForSrcSet = function createSourceElementForSrcSet(image, type) {\n var source = document.createElement('source');\n var srcSetName = \"srcSet\" + (0, _SimpleUtils.capitalize)(type);\n\n if (srcSetName in image) {\n source.type = \"image/\" + type;\n source.srcset = image[srcSetName];\n }\n\n if (image.sizes) {\n source.sizes = image.sizes;\n }\n\n if (image.media) {\n source.media = image.media;\n }\n\n return source.srcset ? source : null;\n};\n\nexports.createSourceElementForSrcSet = createSourceElementForSrcSet;\n\nvar createArtDirectionSources = function createArtDirectionSources(_ref) {\n var fluid = _ref.fluid,\n fixed = _ref.fixed;\n var currentSource = fluid || fixed;\n return currentSource.reduce(function (sources, image) {\n if (!image.media) {\n return sources;\n }\n\n var sourceWebp = createSourceElementForSrcSet(image, 'webp');\n var sourceAvif = createSourceElementForSrcSet(image, 'avif');\n sourceWebp && sources.push(sourceWebp);\n sourceAvif && sources.push(sourceAvif);\n return sources;\n }, []);\n};\n\nexports.createArtDirectionSources = createArtDirectionSources;\n\nvar hasArtDirectionSupport = function hasArtDirectionSupport(props, prop) {\n return props[prop] && Array.isArray(props[prop]) && props[prop].some(function (image) {\n return !!image && typeof image.media !== 'undefined';\n });\n};\n\nexports.hasArtDirectionSupport = hasArtDirectionSupport;\n\nvar hasArtDirectionArray = function hasArtDirectionArray(props) {\n return hasArtDirectionSupport(props, 'fluid') || hasArtDirectionSupport(props, 'fixed');\n};\n\nexports.hasArtDirectionArray = hasArtDirectionArray;\n\nvar matchesMedia = function matchesMedia(_ref2) {\n var media = _ref2.media;\n return media ? (0, _SimpleUtils.isBrowser)() && typeof window.matchMedia !== \"undefined\" && !!window.matchMedia(media).matches : false;\n};\n\nexports.matchesMedia = matchesMedia;","\"use strict\";\n\nexports.__esModule = true;\nexports.combineArray = exports.filteredJoin = exports.hashString = exports.stringToArray = exports.capitalize = exports.toKebabCase = exports.toCamelCase = exports.isObject = exports.isString = exports.isBrowser = void 0;\n\nvar isBrowser = function isBrowser() {\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n};\n\nexports.isBrowser = isBrowser;\n\nvar isString = function isString(value) {\n return Object.prototype.toString.call(value) === '[object String]';\n};\n\nexports.isString = isString;\n\nvar isObject = function isObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n};\n\nexports.isObject = isObject;\n\nvar toCamelCase = function toCamelCase(str) {\n return isString(str) && str.indexOf('-') !== -1 && str.toLowerCase().replace(/(?:^\\w|-|[A-Z]|\\b\\w)/g, function (letter, index) {\n return index === 0 ? letter.toLowerCase() : letter.toUpperCase();\n }).replace(/\\s|\\W+/g, '') || str;\n};\n\nexports.toCamelCase = toCamelCase;\n\nvar toKebabCase = function toKebabCase(str) {\n return isString(str) && str.replace(/\\s|\\W+/g, '').replace(/[A-Z]/g, function (match) {\n return \"-\" + match.toLowerCase();\n });\n};\n\nexports.toKebabCase = toKebabCase;\n\nvar capitalize = function capitalize(str) {\n return (str === null || str === void 0 ? void 0 : str.charAt(0).toUpperCase()) + str.slice(1);\n};\n\nexports.capitalize = capitalize;\n\nvar stringToArray = function stringToArray(str, delimiter) {\n if (delimiter === void 0) {\n delimiter = \" \";\n }\n\n if (str instanceof Array) {\n return str;\n }\n\n if (isString(str)) {\n if (str.includes(delimiter)) {\n return str.split(delimiter);\n }\n\n return [str];\n }\n\n return false;\n};\n\nexports.stringToArray = stringToArray;\n\nvar hashString = function hashString(str) {\n return isString(str) && [].reduce.call(str, function (hash, item) {\n hash = (hash << 5) - hash + item.charCodeAt(0);\n return hash | 0;\n }, 0);\n};\n\nexports.hashString = hashString;\n\nvar filteredJoin = function filteredJoin(arrayToJoin) {\n return arrayToJoin.filter(function (item) {\n return item !== \"\";\n }).join();\n};\n\nexports.filteredJoin = filteredJoin;\n\nvar combineArray = function combineArray(fromArray, toArray) {\n if (!Array.isArray(fromArray)) {\n return [fromArray];\n }\n\n return fromArray.map(function (item, index) {\n return item || toArray && toArray[index];\n });\n};\n\nexports.combineArray = combineArray;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.createNoScriptStyles = exports.createStyleImage = exports.createPseudoStyles = exports.createPseudoElementMediaQuery = exports.createPseudoElementWithContent = exports.createPseudoElement = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _StyleUtils = require(\"./StyleUtils\");\n\nvar _ImageUtils = require(\"./ImageUtils\");\n\nvar _MediaUtils = require(\"./MediaUtils\");\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar createPseudoElement = function createPseudoElement(className, appendix) {\n if (appendix === void 0) {\n appendix = \":before\";\n }\n\n var escapedClassName = (0, _StyleUtils.escapeClassNames)(className);\n var classes = (0, _SimpleUtils.stringToArray)(escapedClassName);\n var pseudoClasses = \"\";\n\n if (Array.isArray(classes)) {\n classes = classes.filter(function (c) {\n return c !== '';\n });\n\n if (classes.length > 0) {\n pseudoClasses = \".\" + classes.join('.') + appendix;\n }\n }\n\n return pseudoClasses;\n};\n\nexports.createPseudoElement = createPseudoElement;\n\nvar createPseudoElementWithContent = function createPseudoElementWithContent(pseudoElementString, imageSource) {\n return \"\\n \" + pseudoElementString + \" {\\n opacity: 1;\\n background-image: \" + imageSource + \";\\n }\";\n};\n\nexports.createPseudoElementWithContent = createPseudoElementWithContent;\n\nvar createPseudoElementMediaQuery = function createPseudoElementMediaQuery(pseudoElementString, media, imageSource, imageSourceWebP) {\n return \"\\n @media \" + media + \" {\\n \" + createPseudoElementWithContent(pseudoElementString, imageSource) + \"\\n }\\n \" + (imageSourceWebP && \"@media \" + media + \" {\\n \" + createPseudoElementWithContent(pseudoElementString, imageSourceWebP) + \"\\n }\") + \"\\n \";\n};\n\nexports.createPseudoElementMediaQuery = createPseudoElementMediaQuery;\n\nvar createPseudoStyles = function createPseudoStyles(_ref) {\n var className = _ref.className,\n transitionDelay = _ref.transitionDelay,\n lastImage = _ref.lastImage,\n nextImage = _ref.nextImage,\n afterOpacity = _ref.afterOpacity,\n bgColor = _ref.bgColor,\n fadeIn = _ref.fadeIn,\n backgroundStyles = _ref.backgroundStyles,\n style = _ref.style,\n finalImage = _ref.finalImage,\n originalData = _ref.originalData;\n var pseudoBefore = createPseudoElement(className);\n var pseudoAfter = createPseudoElement(className, \":after\");\n var currentBackgroundStyles = (0, _extends2.default)({}, backgroundStyles, style);\n return \"\\n \" + pseudoBefore + \",\\n \" + pseudoAfter + \" {\\n content: '';\\n display: block;\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n top: 0;\\n left: 0;\\n \" + (bgColor && \"background-color: \" + bgColor + \";\") + \"\\n \" + (0, _StyleUtils.setTransitionStyles)(transitionDelay, fadeIn) + \"\\n \" + (0, _StyleUtils.kebabifyBackgroundStyles)(currentBackgroundStyles) + \"\\n }\\n \" + pseudoBefore + \" {\\n z-index: -100;\\n \" + ((!afterOpacity || finalImage) && createStyleImage(nextImage, originalData) || \"\") + \"\\n \" + (afterOpacity && lastImage && createStyleImage(lastImage, originalData) || \"\") + \"\\n opacity: \" + Number(!afterOpacity) + \"; \\n }\\n \" + pseudoAfter + \" {\\n z-index: -101;\\n \" + ((afterOpacity || finalImage) && createStyleImage(nextImage, originalData) || \"\") + \"\\n \" + (!afterOpacity && lastImage && createStyleImage(lastImage, originalData) || \"\") + \"\\n \" + (finalImage ? \"opacity: \" + Number(afterOpacity) + \";\" : \"\") + \"\\n }\\n \";\n};\n\nexports.createPseudoStyles = createPseudoStyles;\n\nvar createStyleImage = function createStyleImage(image, originalData) {\n var hasStackedImages = (0, _ImageUtils.hasImageArray)({\n fluid: originalData\n }) && !(0, _MediaUtils.hasArtDirectionArray)({\n fluid: originalData\n });\n\n if ((0, _SimpleUtils.isBrowser)() || hasStackedImages) {\n return image ? \"background-image: \" + image + \";\" : \"\";\n }\n\n return \"\";\n};\n\nexports.createStyleImage = createStyleImage;\n\nvar createNoScriptStyles = function createNoScriptStyles(_ref2) {\n var className = _ref2.className,\n image = _ref2.image;\n\n if (image) {\n var returnArray = Array.isArray(image) && !(0, _MediaUtils.hasArtDirectionArray)({\n fluid: image\n });\n var addUrl = false;\n var allSources = (0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"src\",\n checkLoaded: false,\n addUrl: addUrl,\n returnArray: returnArray\n });\n var sourcesAsUrl = (0, _ImageUtils.getUrlString)({\n imageString: allSources,\n hasImageUrls: true,\n returnArray: returnArray\n });\n var sourcesAsUrlWithCSS = \"\";\n\n if (returnArray) {\n var cssStrings = (0, _ImageUtils.getCurrentFromData)({\n data: image,\n propName: \"CSS_STRING\",\n addUrl: false,\n returnArray: returnArray\n });\n sourcesAsUrlWithCSS = (0, _SimpleUtils.filteredJoin)((0, _SimpleUtils.combineArray)(sourcesAsUrl, cssStrings));\n }\n\n var pseudoBefore = createPseudoElement(className);\n\n if ((0, _MediaUtils.hasArtDirectionArray)({\n fluid: image\n })) {\n return image.map(function (currentMedia) {\n var sourceString = (0, _ImageUtils.getUrlString)({\n imageString: currentMedia.src\n });\n var webPString = (0, _ImageUtils.getUrlString)({\n imageString: currentMedia.srcWebp || \"\"\n });\n\n if (currentMedia.media) {\n return createPseudoElementMediaQuery(pseudoBefore, currentMedia.media, sourceString, webPString);\n }\n\n return createPseudoElementMediaQuery(pseudoBefore, 'screen', sourceString, webPString);\n }).join('');\n }\n\n return createPseudoElementWithContent(pseudoBefore, sourcesAsUrlWithCSS || sourcesAsUrl);\n }\n\n return \"\";\n};\n\nexports.createNoScriptStyles = createNoScriptStyles;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.presetBackgroundStyles = exports.fixOpacity = exports.setTransitionStyles = exports.kebabifyBackgroundStyles = exports.escapeClassNames = exports.fixClassName = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _shortUuid = _interopRequireDefault(require(\"short-uuid\"));\n\nvar _HelperUtils = require(\"./HelperUtils\");\n\nvar _ClassCache = require(\"./ClassCache\");\n\nvar _ImageUtils = require(\"./ImageUtils\");\n\nvar _SimpleUtils = require(\"./SimpleUtils\");\n\nvar fixClassName = function fixClassName(_ref) {\n var className = _ref.className,\n props = (0, _objectWithoutPropertiesLoose2.default)(_ref, [\"className\"]);\n var convertedProps = (0, _HelperUtils.convertProps)(props);\n var elementExists = (0, _ClassCache.inComponentClassCache)(className);\n var imageData = (0, _ImageUtils.getCurrentSrcData)(convertedProps);\n\n var additionalClassname = _shortUuid.default.generate();\n\n var randomClass = \" gbi-\" + (0, _SimpleUtils.hashString)(imageData && imageData.srcSet || className || \"noclass\") + \"-\" + additionalClassname;\n var additionalClass = elementExists || !className ? randomClass : \"\";\n var componentClassNames = (\"\" + (className || \"\") + (additionalClass || \"\")).trim();\n if (!elementExists) (0, _ClassCache.activateCacheForComponentClass)(className);\n return [componentClassNames];\n};\n\nexports.fixClassName = fixClassName;\n\nvar escapeClassNames = function escapeClassNames(classNames) {\n if (classNames) {\n var specialChars = (0, _SimpleUtils.isBrowser)() && window._gbiSpecialChars ? window._gbiSpecialChars : typeof __GBI_SPECIAL_CHARS__ !== \"undefined\" ? __GBI_SPECIAL_CHARS__ : ':/';\n var specialCharRegEx = new RegExp(\"[\" + specialChars + \"]\", 'g');\n return classNames.replace(specialCharRegEx, '\\\\$&');\n }\n\n return classNames;\n};\n\nexports.escapeClassNames = escapeClassNames;\n\nvar kebabifyBackgroundStyles = function kebabifyBackgroundStyles(styles) {\n if ((0, _SimpleUtils.isString)(styles)) {\n return styles;\n }\n\n if (styles instanceof Object) {\n return Object.keys(styles).filter(function (key) {\n return key.indexOf('background') === 0 && styles[key] !== '';\n }).reduce(function (resultingStyles, key) {\n return \"\" + resultingStyles + (0, _SimpleUtils.toKebabCase)(key) + \": \" + styles[key] + \";\\n\";\n }, \"\");\n }\n\n return \"\";\n};\n\nexports.kebabifyBackgroundStyles = kebabifyBackgroundStyles;\n\nvar setTransitionStyles = function setTransitionStyles(transitionDelay, fadeIn) {\n if (transitionDelay === void 0) {\n transitionDelay = \"0.25s\";\n }\n\n if (fadeIn === void 0) {\n fadeIn = true;\n }\n\n return fadeIn ? \"transition: opacity 0.5s ease \" + transitionDelay + \";\" : \"transition: none;\";\n};\n\nexports.setTransitionStyles = setTransitionStyles;\n\nvar fixOpacity = function fixOpacity(props) {\n var styledProps = (0, _extends2.default)({}, props);\n\n if (!styledProps.preserveStackingContext) {\n try {\n if (styledProps.style && styledProps.style.opacity) {\n if (isNaN(styledProps.style.opacity) || styledProps.style.opacity > 0.99) {\n styledProps.style.opacity = 0.99;\n }\n }\n } catch (e) {}\n }\n\n return styledProps;\n};\n\nexports.fixOpacity = fixOpacity;\n\nvar presetBackgroundStyles = function presetBackgroundStyles(backgroundStyles) {\n var defaultBackgroundStyles = {\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\"\n };\n return (0, _extends2.default)({}, defaultBackgroundStyles, backgroundStyles);\n};\n\nexports.presetBackgroundStyles = presetBackgroundStyles;"],"sourceRoot":""} \ No newline at end of file diff --git a/js/packages/metaplex/public/contact/index.html b/js/packages/metaplex/public/contact/index.html new file mode 100644 index 0000000..f7fae60 --- /dev/null +++ b/js/packages/metaplex/public/contact/index.html @@ -0,0 +1,7 @@ +Metaplex | METAPLEX

Get in touch

+If you’re an independent artist, record label, brand or developer that’s looking to get involved, we’d love to talk! The Metaplex Foundation is here to help. +

\ No newline at end of file diff --git a/js/packages/metaplex/public/favicon-32x32.png b/js/packages/metaplex/public/favicon-32x32.png new file mode 100644 index 0000000..d531634 Binary files /dev/null and b/js/packages/metaplex/public/favicon-32x32.png differ diff --git a/js/packages/metaplex/public/framework-d8dc5236baddbb331193.js b/js/packages/metaplex/public/framework-d8dc5236baddbb331193.js new file mode 100644 index 0000000..b9f81d1 --- /dev/null +++ b/js/packages/metaplex/public/framework-d8dc5236baddbb331193.js @@ -0,0 +1,3 @@ +/*! For license information please see framework-d8dc5236baddbb331193.js.LICENSE.txt */ +(self.webpackChunkmetaplex=self.webpackChunkmetaplex||[]).push([[774],{8262:function(e,t,n){"use strict";var r=n(3586);function l(){}function a(){}a.resetWarningCache=l,e.exports=function(){function e(e,t,n,l,a,o){if(o!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:l};return n.PropTypes=n,n}},3980:function(e,t,n){e.exports=n(8262)()},3586:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2967:function(e,t,n){"use strict";var r=n(2784),l=n(6694),a=n(4616);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n