diff --git a/.github/workflows/buildpack.yml b/.github/workflows/buildpack.yml index 06236be..506e485 100644 --- a/.github/workflows/buildpack.yml +++ b/.github/workflows/buildpack.yml @@ -95,30 +95,39 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Restore Build Cached Files + uses: actions/cache@v4 + id: build-cache + with: + path: | + ./.cache + key: ${{ runner.os }}-build-${{ hashFiles('./.cache', './manifest.json') }} + restore-keys: ${{ runner.os }}-build- + + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -127,7 +136,7 @@ jobs: - name: Build and Zip Pack working-directory: ./tools - run: npx gulp + run: npm run gulp env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} @@ -166,30 +175,30 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -199,7 +208,7 @@ jobs: - name: Make Artifact Names id: artifactNames working-directory: ./tools - run: npx gulp makeArtifactNames + run: npm run gulp makeArtifactNames buildClient: name: Build Pack Client (${{ inputs.tag }}) @@ -218,30 +227,30 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -250,7 +259,7 @@ jobs: - name: Build Client working-directory: ./tools - run: npx gulp buildClient + run: npm run gulp buildClient env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} @@ -283,30 +292,39 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Restore Build Cached Files + uses: actions/cache@v4 + id: build-cache + with: + path: | + ./.cache + key: ${{ runner.os }}-build-${{ hashFiles('./.cache', './manifest.json') }} + restore-keys: ${{ runner.os }}-build- + + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -315,7 +333,7 @@ jobs: - name: Build Server working-directory: ./tools - run: npx gulp buildServer + run: npm run gulp buildServer env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} @@ -348,30 +366,30 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -380,7 +398,7 @@ jobs: - name: Build Lang and Changelogs working-directory: ./tools - run: npx gulp buildLang + run: npm run gulp buildLang env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 0000000..d962bd9 --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,54 @@ +name: Checks +on: + push: + branches: + - main + - test_buildscript* + - dev/* + paths-ignore: + - "README.md" + + pull_request: + branches: + - main + paths-ignore: + - "README.md" + +jobs: + checks: + name: Checks + runs-on: ubuntu-latest + steps: + - name: Checkout Ref + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Restore NPM Cached Files + uses: actions/cache@v4 + id: npm-cache + with: + path: | + ~/.npm + ./tools/node_modules + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- + + - name: Setup NodeJS v20 + uses: actions/setup-node@v4 + with: + node-version: 20 + check-latest: true + + - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' + working-directory: ./tools + run: npm ci + + - name: Check Buildscripts + working-directory: ./tools + run: npm run check + + - name: Check QB + working-directory: ./tools + run: npm run gulp checkQB diff --git a/.github/workflows/createchangelog.yml b/.github/workflows/createchangelog.yml index 2ee0835..529662a 100644 --- a/.github/workflows/createchangelog.yml +++ b/.github/workflows/createchangelog.yml @@ -62,12 +62,11 @@ jobs: steps: - name: Get Token id: token - uses: peter-murray/workflow-application-token-action@v3 + uses: actions/create-github-app-token@v1 with: - application_id: ${{ secrets.APP_ID }} - application_private_key: ${{ secrets.APP_KEY }} - organization: Nomi-CEu - revoke_token: true + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_KEY }} + owner: Nomi-CEu - name: Checkout Repo uses: actions/checkout@v4 @@ -76,30 +75,30 @@ jobs: ref: ${{ inputs.tag }} token: ${{ steps.token.outputs.token }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Create Changelog working-directory: ./tools - run: npx gulp createChangelog + run: npm run gulp createChangelog env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} COMPARE_TAG: ${{ inputs.compare_tag }} diff --git a/.github/workflows/deploycf.yml b/.github/workflows/deploycf.yml index 0f114b7..e0c55bc 100644 --- a/.github/workflows/deploycf.yml +++ b/.github/workflows/deploycf.yml @@ -25,30 +25,30 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -67,4 +67,4 @@ jobs: CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} RELEASE_TYPE: ${{ inputs.release_type }} working-directory: ./tools - run: npx gulp deployCurseForge + run: npm run gulp deployCurseForge diff --git a/.github/workflows/deploygh.yml b/.github/workflows/deploygh.yml index 559b19d..e808015 100644 --- a/.github/workflows/deploygh.yml +++ b/.github/workflows/deploygh.yml @@ -21,12 +21,11 @@ jobs: steps: - name: Get Token id: token - uses: peter-murray/workflow-application-token-action@v3 + uses: actions/create-github-app-token@v1 with: - application_id: ${{ secrets.APP_ID }} - application_private_key: ${{ secrets.APP_KEY }} - organization: Nomi-CEu - revoke_token: true + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_KEY }} + owner: Nomi-CEu - name: Checkout Tag uses: actions/checkout@v4 @@ -34,30 +33,30 @@ jobs: fetch-depth: 0 ref: ${{ inputs.tag }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -77,4 +76,4 @@ jobs: CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} RELEASE_TYPE: ${{ inputs.release_type }} working-directory: ./tools - run: npx gulp deployReleases + run: npm run gulp deployReleases diff --git a/.github/workflows/forkprbuildpack.yml b/.github/workflows/forkprbuildpack.yml index 676960d..f787eed 100644 --- a/.github/workflows/forkprbuildpack.yml +++ b/.github/workflows/forkprbuildpack.yml @@ -47,7 +47,7 @@ jobs: # Don't use cache to prevent cache poisoning - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 @@ -60,7 +60,7 @@ jobs: - name: Make Artifact Names id: artifactNames working-directory: ./tools - run: npx gulp makeArtifactNames + run: npm run gulp makeArtifactNames buildClient: # Only continue if we are in base Nomi-CEu Repo and pull request is from fork @@ -81,7 +81,7 @@ jobs: # Don't use cache to prevent cache poisoning - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 @@ -93,7 +93,7 @@ jobs: - name: Build Client working-directory: ./tools - run: npx gulp buildClient + run: npm run gulp buildClient env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} @@ -124,7 +124,7 @@ jobs: # Don't use cache to prevent cache poisoning - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 @@ -136,7 +136,7 @@ jobs: - name: Build Server working-directory: ./tools - run: npx gulp buildServer + run: npm run gulp buildServer env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} @@ -167,7 +167,7 @@ jobs: # Don't use cache to prevent cache poisoning - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 @@ -179,7 +179,7 @@ jobs: - name: Build Lang and Changelogs working-directory: ./tools - run: npx gulp buildLang + run: npm run gulp buildLang env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} diff --git a/.github/workflows/releasecommit.yml b/.github/workflows/releasecommit.yml index e5305f3..bac2fb3 100644 --- a/.github/workflows/releasecommit.yml +++ b/.github/workflows/releasecommit.yml @@ -58,12 +58,11 @@ jobs: steps: - name: Get Token id: token - uses: peter-murray/workflow-application-token-action@v3 + uses: actions/create-github-app-token@v1 with: - application_id: ${{ secrets.APP_ID }} - application_private_key: ${{ secrets.APP_KEY }} - organization: Nomi-CEu - revoke_token: true + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_KEY }} + owner: Nomi-CEu - name: Checkout Repo uses: actions/checkout@v4 @@ -71,30 +70,30 @@ jobs: fetch-depth: 0 token: ${{ steps.token.outputs.token }} - - name: Restore Cached Files + - name: Restore NPM Cached Files uses: actions/cache@v4 - id: cache + id: npm-cache with: path: | ~/.npm - ./.cache ./tools/node_modules - key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} - restore-keys: ${{ runner.os }}-bunny- + key: ${{ runner.os }}-npm-${{ hashFiles('./tools/package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- - - name: Setup NodeJS v16 + - name: Setup NodeJS v20 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages + if: steps.npm-cache.outputs.cache-hit != 'true' working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools - run: npx gulp check + run: npm run gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} @@ -103,7 +102,7 @@ jobs: - name: Update Files working-directory: ./tools - run: npx gulp updateFilesAll + run: npm run gulp updateFilesAll - name: Commit and Push Release Changes uses: stefanzweifel/git-auto-commit-action@v5 diff --git a/.github/workflows/updateEnglishLang.yml b/.github/workflows/updateEnglishLang.yml index 7afe7a8..4ea2a62 100644 --- a/.github/workflows/updateEnglishLang.yml +++ b/.github/workflows/updateEnglishLang.yml @@ -28,16 +28,15 @@ jobs: # Nomi-CEu-Management has access to all of Nomi-CEu's Repos. - name: Get Token id: token - uses: peter-murray/workflow-application-token-action@v3 + uses: actions/create-github-app-token@v1 with: # Shared Org Secret: Contains the Nomi-CEu-Management App ID (773030) - application_id: ${{ secrets.APP_ID }} + app-id: ${{ secrets.APP_ID }} # Shared Org Secret: Contains the Nomi-CEu-Management App's Private Key. # run `cat {PEM_FILE_PATH} | base64 -w 0 && echo` to encode the key first if changing the key. # Paste the output of the command into the secret value. - application_private_key: ${{ secrets.APP_KEY }} - organization: Nomi-CEu - revoke_token: true + private-key: ${{ secrets.APP_KEY }} + owner: Nomi-CEu - name: Dispatch Workflow uses: actions/github-script@v5 diff --git a/.gitignore b/.gitignore index 3bcbe56..aa5e2b7 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,9 @@ tools/node_modules .vscode/ tools/.vscode/ +# Tools Debugging +tools/.dest/ + # OS Specific # Mac diff --git a/overrides/config-overrides/expert/betterquesting/DefaultQuests.json b/overrides/config-overrides/expert/betterquesting/DefaultQuests.json index 6c9c6b9..b0c2ec2 100644 --- a/overrides/config-overrides/expert/betterquesting/DefaultQuests.json +++ b/overrides/config-overrides/expert/betterquesting/DefaultQuests.json @@ -1,5 +1,5 @@ { - "build:8": "4.2.1", + "build:8": "4.2.2", "format:8": "2.0.0", "questDatabase:9": { "0:10": { @@ -9,7 +9,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.\n\n", + "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -70,8 +70,8 @@ }, "1:10": { "preRequisites:11": [ - 282, - 116 + 116, + 282 ], "properties:10": { "betterquesting:10": { @@ -170,12 +170,12 @@ }, "2:10": { "preRequisites:11": [ - 55 + 1052 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.\n\n", + "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -339,7 +339,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§c§rOres in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, there is a quest you can use to refill the energy of the scanner, which is located on this chapter.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron §cNuggets§e a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", + "desc:8": "Ores in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, there is a quest you can use to refill the energy of the scanner, which is located on this chapter.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron §cNuggets§e a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1019,7 +1019,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", + "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1505,7 +1505,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nYou can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.\n", + "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nYou can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1668,7 +1668,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Your first RF power generator!\n\nKeep in mind that §eDynamos only output power when burning through fuel, and only the block attached directly to the coil will get provided with power§r.", + "desc:8": "Your first major crafting project!\n\nThe §6Steam Dynamo§r will be your source of §dpower§r for the early game. It requires §9Water§r and burnable fuel like §6Coal§r or §6Sugar Cane§r to produce power.\n\nYou can also choose to make §6Basic Steam Turbines§r to generate EU directly.\n\nKeep in mind that §eDynamos only output power when burning through fuel§r, and §6only the block attached directly to the coil will get provided with power§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -2004,9 +2004,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32014, + "Damage:2": 14, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" }, "1:10": { "Count:3": 1, @@ -2457,14 +2457,14 @@ }, "38:10": { "preRequisites:11": [ + 24, 40, - 530, - 24 + 530 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts any §2§oLV Energy Converter§r§o.\n\n§r§aRF power§r and §bGregTech§r §aEU power§r is incompatible. With your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §3§2Energy Converter§r.\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", + "desc:8": "§oNote: this quest accepts any §oLV Energy Converter§o.\n\n§rThe §3Steam Dynamos§r you have made are capable of generating §aRF power§r, but §bGregTech§r machines require §aEU power§r.\n\n§cNote that the two are incompatible!§r\n\nWith your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §2Energy Converter§r.\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3050,7 +3050,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §3Cryogenic Distillation§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §3Cryogenic Distillation§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3104,7 +3104,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2GTCEu Fluid Pipes§r are now available, much improved from CE. Their advantage is higher §dthroughput§r, but they have limitations on the kinds of fluids (§eacids, gases§r, etc) they can transport safely. Check each pipe material\u0027s tooltip for details.\n\nThere are also §6Quadruple and Nonuple Pipes§r for transporting multiple fluid types through the same block.\n\nYou also can only use them for now, until you get access to...\n\n§bEnderIO§r§6 Fluid Conduits§r. They have the advantage of being §6Conduits§r, allowing them to fit in the same block as other §6Conduits§r. \n\nPick your poison.", + "desc:8": "§2GTCEu Fluid Pipes§r are now available, much improved from CE. Their advantage is higher §dthroughput§r, but they have limitations on the kinds of fluids (§eacids, gases§r, etc) they can transport safely. Check each pipe material\u0027s tooltip for details.\n\nThere are also §6Quadruple and Nonuple Pipes§r for transporting multiple fluid types through the same block.\n\nYou also can only use them for now, until you get access to...\n\n§bEnderIO§6 Fluid Conduits§r. They have the advantage of being §6Conduits§r, allowing them to fit in the same block as other §6Conduits§r. \n\nPick your poison.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3388,13 +3388,12 @@ }, "55:10": { "preRequisites:11": [ - 53, - 727 + 53 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9Liquid Rubber§r.\n\n", + "desc:8": "§3Centrifuges§r spin up items to seperate them into simpler components. Similar to a §bElectrolyzer§r.\n\nCurrently, you need this to make §eGlue§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3406,7 +3405,7 @@ "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, - "name:8": "§2Centrifuge", + "name:8": "Centrifuge", "partysinglereward:1": 0, "questlogic:8": "AND", "repeat_relative:1": 1, @@ -3543,7 +3542,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Batteries§r are §bGregTech §rpower storage for §aEU§r energy.\n\nThere are several types of rechargeable batteries you can make; §2Lithium Batteries§r are the best ones, followed by §6Cadmium§r and §6Sodium§r.\n\n§6Lithium§r is possible to find by processing §6Lepidolite§r. Later, it is found inside of §6Tungsten§r veins that only spawn in §eThe End§r§r. §6Cadmium§r comes from various §6Refined Ores§r, and §6Sodium§r is the easiest - from §6Salt§r, §6Clay§r, and many other minerals.", + "desc:8": "§6Batteries§r are §bGregTech §rpower storage for §aEU§r energy.\n\nThere are several types of rechargeable batteries you can make; §2Lithium Batteries§r are the best ones, followed by §6Cadmium§r and §6Sodium§r.\n\n§6Lithium§r is possible to find by processing §6Lepidolite§r. Later, it is found inside of §6Tungsten§r veins that only spawn in §eThe End§r. §6Cadmium§r comes from various §6Refined Ores§r, and §6Sodium§r is the easiest - from §6Salt§r, §6Clay§r, and many other minerals.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3663,7 +3662,8 @@ "preRequisites:11": [ 21, 59, - 903 + 903, + 1051 ], "properties:10": { "betterquesting:10": { @@ -3776,7 +3776,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§6§2Perfect Gems§r can be obtained from such missions.", + "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§2Perfect Gems§r can be obtained from such missions.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3879,13 +3879,13 @@ }, "63:10": { "preRequisites:11": [ - 62, - 1 + 1, + 62 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.\n\n", + "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4003,18 +4003,18 @@ "65:10": { "preRequisiteTypes:7": [ 0, - 0, + 2, 2 ], "preRequisites:11": [ 246, - 386, - 328 + 328, + 386 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore§r\n§\n\nor:\n§6* Dense Magma Block§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", + "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore\n§2* Cobaltite Ore\n* Laurite Ore\n* Cuprorhodsite Ore§r\n\nor:\n§6* Dense Magma Block§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4069,7 +4069,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Use your newly acquired §3Alloy Smelter§r§ to make some new alloys!\n\n§eCopper§r alloyed with §eRedstone§r makes §6Red Alloy Ingots§r.\n\n§eIron§r alloyed with §eRedstone§r makes §6Conductive Iron Ingots§r.\n\n§aHammer§r them into §6Plates§r, then §acut§r them into §6Wires§r.\n", + "desc:8": "Use your newly acquired §3Alloy Smelter to make some new alloys!\n\n§eCopper§r alloyed with §eRedstone§r makes §6Red Alloy Ingots§r.\n\n§eIron§r alloyed with §eRedstone§r makes §6Conductive Iron Ingots§r.\n\n§aHammer§r them into §6Plates§r, then §acut§r them into §6Wires§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4370,7 +4370,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.\n", + "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4761,7 +4761,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of small dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", + "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4829,7 +4829,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.\n", + "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5127,7 +5127,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -5148,8 +5148,20 @@ "Damage:2": 568, "OreDict:8": "", "id:8": "gregtech:meta_item_1" - }, - "1:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 593, "OreDict:8": "", @@ -5315,7 +5327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §a§3§2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n", + "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n§rAlternatively, you can use §9Sulfuric Acid§r to create §9Chemical Dyes§r of the required color, and use them to make dyed §6Glass Lenses§r. Chemical Dyes can be infinitely looped.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5365,8 +5377,8 @@ "89:10": { "preRequisites:11": [ 87, - 236, - 130 + 130, + 236 ], "properties:10": { "betterquesting:10": { @@ -5645,7 +5657,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Sulfuric Acid is mainly produced in a 3-step process:§r\n-§6 Sulfur§o§r added to §9Oxygen§r to produce §9Sulfur Dioxide§r. §9SO₂§r also can come from treating certain §6Sulfur-containing Dusts§r with §9Oxygen§r in the EBF, or by processing §eNether Air§r.\n- §9Sulfur Dioxide§r added to more §9Oxygen§r, with §cVanadium Pentoxide§r catalyst, to produce §9Sulfur Trioxide§r.\n- §9Sulfur Trioxide§r added to §9Water§r, to produce §eSulfuric Acid§r.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at EV.\n\nYou can also get Sulfuric Acid by adding §9Oxygen§r to §9Hydrogen Sulfide§r, which can be obtained via Petroleum, or by combining §9Hydrogen§r and §6Sulfur§r.\n\n§rYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things.", + "desc:8": "§9Sulfuric Acid§r is mainly produced in a 3-step process:§r\n\n- §6Sulfur§r added to §9Oxygen§r to produce §eSulfur Dioxide§r. §9SO₂§r also can come from treating certain §6Sulfur-containing Dusts§r with §9Oxygen§r in the EBF, or by processing §eNether Air§r.\n\n- §9Sulfur Dioxide§r added to more §9Oxygen§r, with §cVanadium Pentoxide§r catalyst, to produce §eSulfur Trioxide§r.\n\n- §9Sulfur Trioxide§r added to §9Water§r, to produce §9Sulfuric Acid§r.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at §dEV§r.\n\nYou can also get Sulfuric Acid by adding §9Oxygen§r to §9Hydrogen Sulfide§r, which can be obtained via Petroleum, or by combining §9Hydrogen§r and §6Sulfur§r.\n\nYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6227,7 +6239,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\nIt is also a §cvery bad idea§r to encode recipes that require GregTech hand tools (even worse with Substitutions on). They are not handled gracefully, causing your crafting computations to explode in complexity and memory requirement.\n\nUse recipes that use machines instead!\n\n", + "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\nIt is also a §cvery bad idea§r to encode recipes that require GregTech hand tools (even worse with Substitutions on). They are not handled gracefully, causing your crafting computations to explode in complexity and memory requirement.\n\nUse recipes that use machines instead!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6330,8 +6342,8 @@ }, "106:10": { "preRequisites:11": [ - 104, - 62 + 62, + 104 ], "properties:10": { "betterquesting:10": { @@ -6439,8 +6451,8 @@ }, "108:10": { "preRequisites:11": [ - 109, - 100 + 100, + 109 ], "properties:10": { "betterquesting:10": { @@ -6499,7 +6511,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to 9 stacks of items for passive autocrafting, Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.\n\n", + "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to 9 stacks of items for passive autocrafting, Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6609,8 +6621,8 @@ }, "111:10": { "preRequisites:11": [ - 105, - 62 + 62, + 105 ], "properties:10": { "betterquesting:10": { @@ -6893,7 +6905,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.", + "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.\n\nAt first, you will have to create §6Black Bronze Dust§r on the way to §6Black Steel Dust§r. By making an §6HV Mixer§r, you can skip this step with a shortcut recipe.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6942,8 +6954,8 @@ }, "117:10": { "preRequisites:11": [ - 132, - 102 + 102, + 132 ], "properties:10": { "betterquesting:10": { @@ -7381,7 +7393,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.\n\n", + "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7704,7 +7716,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Vinyl Chloride§r is an industrial chemical made from chlorinating §9Ethylene§r (adding §9Chlorine§r at high temperature) in a §3Chemical Reactor§r. §9Ethane§r can be used as an alternative reagent.\n\nIt is used to create the plastic §9Polyvinyl Chloride§r, most well known as PVC. While it deviates from reality, in GregTech you chemically react Vinyl Chloride and §9Oxygen§r to polymerize it into PVC.\n\nLater, you can use §9Titanium Tetrachloride§r to catalyze this reaction as well for greater yield.\n\n§6PVC Sheets§r are superior to §6Polyethylene Sheets§r for making plastic substrates, producing twice as many §6Plastic Boards§r per craft.\n\n", + "desc:8": "§9Vinyl Chloride§r is an industrial chemical made from chlorinating §9Ethylene§r (adding §9Chlorine§r at high temperature) in a §3Chemical Reactor§r. §9Ethane§r can be used as an alternative reagent.\n\nIt is used to create the plastic §9Polyvinyl Chloride§r, most well known as PVC. While it deviates from reality, in GregTech you chemically react Vinyl Chloride and §9Oxygen§r to polymerize it into PVC.\n\nLater, you can use §9Titanium Tetrachloride§r to catalyze this reaction as well for greater yield.\n\n§6PVC Sheets§r are superior to §6Polyethylene Sheets§r for making plastic substrates, producing twice as many §6Plastic Boards§r per craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7754,8 +7766,8 @@ "132:10": { "preRequisites:11": [ 35, - 203, - 52 + 52, + 203 ], "properties:10": { "betterquesting:10": { @@ -8090,7 +8102,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6§2Rhodium Plated Lumium-Palladium§r,§6 Vanadium-Gallium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", + "desc:8": "With §2Rhodium Plated Lumium-Palladium§r,§6 Vanadium-Gallium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8671,7 +8683,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r. \n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nYou should have set up a §3Vaccum Freezer§r for §6Kanthal§r, but if you haven\u0027t done it yet or want to improve your setup, routing through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering you\u0027re system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", + "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r.\n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nRouting through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering your system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8711,7 +8723,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Vacuum Freezers§r are primarily used to cool down hot ingots.\n\nThey\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", + "desc:8": "§3Vacuum Freezers§r are primarily used to cool down §6Hot Ingots§r. They\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nThe energy tier required for the Vacuum Freezer is typically one tier below the tier used to process the ingot in the §3Electric Blast Furnace§r. \n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8752,6 +8764,12 @@ "Damage:2": 1002, "OreDict:8": "", "id:8": "gregtech:machine" + }, + "1:10": { + "Count:3": 14, + "Damage:2": 3, + "OreDict:8": "", + "id:8": "gregtech:metal_casing" } }, "taskID:8": "bq_standard:retrieval" @@ -8766,7 +8784,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§6§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.\n\n", + "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8929,7 +8947,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "It\u0027s finally time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The § §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", + "desc:8": "It\u0027s finally time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9060,9 +9078,9 @@ "156:10": { "preRequisites:11": [ 60, - 1040, 91, - 836 + 836, + 1040 ], "properties:10": { "betterquesting:10": { @@ -9175,7 +9193,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9664,7 +9682,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Water§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", + "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Oxygen§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9719,7 +9737,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Diesel§r is a mixture of §9Light Fuel§r and §9Heavy Fuel§r. Each mB of Diesel generates §d480 EU§r in §3Combustion Generators§r.\n\nOnce you get HV machinery, you can upgrade this to §9Cetane-Boosted Diesel§r.\n\n§2§rIt\u0027s more power efficient to use §3singleblock Distilleries§r over a §3Distillation Tower§r for Oil, due to the overclocking mechanics being different. For Diesel, the correct ratio is §d3 Distilleries for Light Oil and 2 Distilleries for Heavy Oil§r.", + "desc:8": "§9Diesel§r is a mixture of §9Light Fuel§r and §9Heavy Fuel§r. Each mB of Diesel generates §d480 EU§r in §3Combustion Generators§r.\n\nOnce you get HV machinery, you can upgrade this to §9Cetane-Boosted Diesel§r.\n\n§rIt\u0027s more power efficient to use §3singleblock Distilleries§r over a §3Distillation Tower§r for Oil, due to the overclocking mechanics being different. For Diesel, the correct ratio is §d3 Distilleries for Light Oil and 2 Distilleries for Heavy Oil§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9881,7 +9899,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.\n", + "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9936,7 +9954,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The reaction that produces §9Bio Diesel§r is also the only source of §9Glycerol§r, which is an easy way to make §9Epichlorohydrin§r, an important ingredient of §9Epoxy§r.\n\n§9Glycerol§r is also used in the production of §9§9Glyceryl Trinitrate§r, an important step in making §6Dynamite§r, which can be used later in the §9§r§3Implosion Compressor§r.\n\nEven if you\u0027re otherwise going all in on petrochemistry for Epoxy, you\u0027ll probably end up with some Bio Diesel as a result of making Glycerol.\n\nBio Diesel can be used for power, but is probably better to convert to §2Cetane-Boosted Diesel§r.", + "desc:8": "The reaction that produces §9Bio Diesel§r is also the only source of §9Glycerol§r, which is an easy way to make §9Epichlorohydrin§r, an important ingredient of §9Epoxy§r.\n\n§9Glycerol§r is also used in the production of §9Glyceryl Trinitrate§r, an important step in making §6Dynamite§r, which can be used later in the §3Implosion Compressor§r.\n\nEven if you\u0027re otherwise going all in on petrochemistry for Epoxy, you\u0027ll probably end up with some Bio Diesel as a result of making Glycerol.\n\nBio Diesel can be used for power, but is probably better to convert to §2Cetane-Boosted Diesel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10045,7 +10063,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10986,6 +11004,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 569, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -11332,12 +11368,12 @@ }, "197:10": { "preRequisites:11": [ - 201 + 311 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11976,7 +12012,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.\n\n", + "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12096,7 +12132,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r. ", + "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12205,7 +12241,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.\n", + "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12326,13 +12362,13 @@ }, "214:10": { "preRequisites:11": [ - 232, - 55 + 55, + 232 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Rutile Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).\n\n\n", + "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Bauxite Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12436,8 +12472,8 @@ "216:10": { "preRequisites:11": [ 89, - 897, - 214 + 214, + 895 ], "properties:10": { "betterquesting:10": { @@ -12565,7 +12601,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n§\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.\n\n", + "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13072,7 +13108,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.\n", + "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13121,13 +13157,13 @@ }, "228:10": { "preRequisites:11": [ - 490, - 29 + 29, + 490 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThis quest calls for a §aRedstone Timer§r, but there are other ways to make snad grow sugar cane even faster (like a vanilla observer clock pointing into the Snad). Make sure to set the timer to pulse as fast as possible.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", + "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThe premier way to activate Snad is with a §6Redstone Conduit§r. By force-connecting the conduit to the side of the Snad block with a Wrench, and inserting a §aSensor Filter§r, you can get the highest growth rate possible. Simpler methods such as a §aRedstone Clock§r can also work, but not as effectively.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13174,21 +13210,39 @@ "Damage:2": 0, "OreDict:8": "", "id:8": "enderio:block_vacuum_chest" - }, - "2:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", - "id:8": "extrautils2:redstoneclock" + "id:8": "enderio:item_redstone_conduit" }, - "3:10": { + "1:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "enderio:item_redstone_sensor_filter" + }, + "2:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", "id:8": "storagedrawers:upgrade_void" } }, - "taskID:8": "bq_standard:retrieval" + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -13660,14 +13714,14 @@ "238:10": { "preRequisites:11": [ 241, + 258, 330, - 411, - 258 + 411 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r§r and the other items are otherwise craftable.", + "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r and the other items are otherwise craftable.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13778,7 +13832,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a decent quantity of §6Neutronium§r, but you have to bootstrap it with some Neutronium from the §3Fusion Reactor Mark 3§r anyway. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", + "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a large quantity of §6Neutronium§r. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13833,7 +13887,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14473,7 +14527,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Fifth Micro Miner.\n\nThe only source of §6Naquadah§r, in the form of §cSnowchestite Ore§r. Along with it, § §2Kaemanite Ore§r (for §6Trinium§r), and §cPollucite Ore§r (for §6Caesium§r).\n\nWhen provided with §6Stabilized Uranium§r, brings:\n§6§2* Uraninite Ore§6\n* Palladium Ore\n§2* Realgar Ore\n§6* Bastnasite Ore\n* Sphalerite Ore\n* Monazite Ore\n§2* Enderpearl Blocks\n* Osmiridium 80/20 Ore\n* Iridosmine 80/20 Ore\n§6* Boron Dust\n* Molybdenite Ore\n* Beryllium Ore\n* Fluorite Ore", + "desc:8": "The Fifth Micro Miner.\n\nThe only source of §6Naquadah§r, in the form of §cSnowchestite Ore§r. Along with it, §2Kaemanite Ore§r (for §6Trinium§r), and §cPollucite Ore§r (for §6Caesium§r).\n\nWhen provided with §6Stabilized Uranium§r, brings:\n§2* Uraninite Ore§6\n* Palladium Ore\n§2* Realgar Ore\n§6* Bastnasite Ore\n* Sphalerite Ore\n* Monazite Ore\n§2* Enderpearl Blocks\n* Osmiridium 80/20 Ore\n* Iridosmine 80/20 Ore\n§6* Boron Dust\n* Molybdenite Ore\n* Beryllium Ore\n* Fluorite Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14581,7 +14635,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Sixth Micro Miner.\n\nThe first decent source of §6Dragon Eggs§r and §6Stabilized Einsteinium§r.\n\nIs also useful for:\n§6§2* Uraninite Ore\n§c* Sheldonite Ore\n* Iridosmine 80/20 Ore", + "desc:8": "The Sixth Micro Miner.\n\nThe first decent source of §6Dragon Eggs§r and §6Stabilized Einsteinium§r.\n\nIs also useful for:\n§2* Uraninite Ore\n§c* Sheldonite Ore\n* Iridosmine 80/20 Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14745,7 +14799,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14799,7 +14853,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Awakened Draconium§r is a powerful material used for crafting high-grade components, items, and machines from §bDraconic Evolution§r.\n\nFive §6§6Draconium Blocks§r can be processed in a Wyvern Tier fusion crafting setup to create an equal output of five §6Awakened Draconium Blocks§r. At §e24 Billion RF per craft§r, you better have a handle on your power infrastructure.", + "desc:8": "§6Awakened Draconium§r is a powerful material used for crafting high-grade components, items, and machines from §bDraconic Evolution§r.\n\nFive §6Draconium Blocks§r can be processed in a Wyvern Tier fusion crafting setup to create an equal output of five §6Awakened Draconium Blocks§r. At §e24 Billion RF per craft§r, you better have a handle on your power infrastructure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15018,7 +15072,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes. ", + "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15072,7 +15126,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Small Piles of Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.\n", + "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\nThere is an alternative recipe set to §9Programmed Circuit §64§r, which performs the recipe in a larger batch and §2allows you to skip combining small piles into full dusts.§r\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15128,7 +15182,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With your new §6§6§ §6Epoxy Circuit Boards§r, §6QBit CPUs§r, and some standard components, you can make the final type of Tier Four Circuit: the §6Quantum Circuit§r.\n\nAs the best form of Tier Four circuit, these should be automated and stockpiled. The variant recipe requiring §6Advanced System-on-Chip§r won\u0027t be available until ZPM.", + "desc:8": "With your new §6Epoxy Circuit Boards§r, §6QBit CPUs§r, and some standard components, you can make the final type of Tier Four Circuit: the §6Quantum Circuit§r.\n\nAs the best form of Tier Four circuit, these should be automated and stockpiled. The variant recipe requiring §6Advanced System-on-Chip§r won\u0027t be available until ZPM.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15237,7 +15291,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Item Pipes are back in GTCEu! They will transport items instantly through them.§r\n\nThis quest accepts a §bGregTech §6Item Pipe§r of any material, and size and of both normal and restrictive variants.\n\nTheir advantage over §bEnderIO§r §6Item Conduits§r is their far higher §6throughput§r. An unupgraded EIO Item Conduit transports §2§r§38 items per second§r, and up to §3128§r when upgraded. In comparison, small low-tier Item Pipes can transfer §364 items per second§r, and those made from later materials can transfer multiple stacks per second.\n\nFurthermore, with a §6Robot Arm§r cover, these can do perfect §3Round-Robin§r, equally spliiting the items between the §eDestinations§r.\n\nFor now, the recommended material to use for these is §6Tin§r.\n\nThey don\u0027t §3auto-extract§r by themselves, so you have to use §6Conveyor§r covers etc. with them.\n\nThe priority mechanics are more complicated, so skip ahead if you are not interested:\nA §eDestination§r will have a §3Routing Value§r calculated, which is the sum of all §3Routing Values§r of the individual Pipes to that §eDestination§r. Whichever §eDestination§r has the lowest §3Routing Value§r will be the one selected for Insertion.\n§6Restrictive Pipes§r typically have the lowest §3Priority§r for insertion due to their higher §3Routing Value§r.", + "desc:8": "§2Item Pipes are back in GTCEu! They will transport items instantly through them.§r\n\nThis quest accepts a §bGregTech §6Item Pipe§r of any material, and size and of both normal and restrictive variants.\n\nTheir advantage over §bEnderIO§r §6Item Conduits§r is their far higher §6throughput§r. An unupgraded EIO Item Conduit transports §38 items per second§r, and up to §3128§r when upgraded. In comparison, small low-tier Item Pipes can transfer §364 items per second§r, and those made from later materials can transfer multiple stacks per second.\n\nFurthermore, with a §6Robot Arm§r cover, these can do perfect §3Round-Robin§r, equally spliiting the items between the §eDestinations§r.\n\nFor now, the recommended material to use for these is §6Tin§r.\n\nThey don\u0027t §3auto-extract§r by themselves, so you have to use §6Conveyor§r covers etc. with them.\n\nThe priority mechanics are more complicated, so skip ahead if you are not interested:\nA §eDestination§r will have a §3Routing Value§r calculated, which is the sum of all §3Routing Values§r of the individual Pipes to that §eDestination§r. Whichever §eDestination§r has the lowest §3Routing Value§r will be the one selected for Insertion.\n§6Restrictive Pipes§r typically have the lowest §3Priority§r for insertion due to their higher §3Routing Value§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15617,7 +15671,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Mixes dusts together.\n\nFor now, you\u0027ll be using it to make §6Energetic Alloy Dust§r.\n\nEnergetic Alloy Dust is made from §6Redstone§r, §6Gold Dust§r and §6Glowstone Dust§r. \n\nYou should have some Glowstone from your adventures in the §cNether§r, but you can also make it by mixing §6Tricalcium Phosphate Dust§r§r§r and §6§6§6Gold Dust§r§r§r.", + "desc:8": "Mixes dusts together.\n\nFor now, you\u0027ll be using it to make §6Energetic Alloy Dust§r.\n\nEnergetic Alloy Dust is made from §6Redstone§r, §6Gold Dust§r and §6Glowstone Dust§r. \n\nYou should have some Glowstone from your adventures in the §cNether§r, but you can also make it by mixing §6Tricalcium Phosphate Dust§r and §6Gold Dust§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15925,7 +15979,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.\n\n", + "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15934,7 +15988,7 @@ "id:8": "minecraft:dragon_egg" }, "ignoresview:1": 0, - "ismain:1": 0, + "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, "name:8": "Breaking Some Eggs", @@ -16209,7 +16263,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With your §6§2Rhodium Plated Lumium-Palladium§r-based machine hulls, Assembling Machine built, and §6Quantum Processor Mainframes§r squared away, you can finally get on the path to making a Ludicrous Voltage §3Circuit Assembling Machine§r.\n\nThis tier of Assembling Machine unlocks §6Crystal Circuits§r, as well as handling crafting recipes up to 32768 EU/t. It can also optionally overclock recipes that consume up to 8192 EU/t for improved speed at the cost of relatively more power.", + "desc:8": "With your §2Rhodium Plated Lumium-Palladium§r-based machine hulls, Assembling Machine built, and §6Quantum Processor Mainframes§r squared away, you can finally get on the path to making a Ludicrous Voltage §3Circuit Assembling Machine§r.\n\nThis tier of Assembling Machine unlocks §6Crystal Circuits§r, as well as handling crafting recipes up to 32768 EU/t. It can also optionally overclock recipes that consume up to 8192 EU/t for improved speed at the cost of relatively more power.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16449,13 +16503,13 @@ "287:10": { "preRequisites:11": [ 234, - 847, - 286 + 286, + 847 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Time to get fusing!\n\nThe §3Fusion Reactor§r is a multiblock that uses enormous amounts of energy to fuse fluids into new elements. This one is less flexible than the previous GregTech multiblocks, as you can only put hatches where the preview shows. §6Sneak-right click§r the controller to enable the in-world preview.\n\nThe §bJEI§r preview shows §e§eall valid hatch locations§r, but you don\u0027t actually need that many fluid hatches. You can replace any of the hatch positions in the structure with §2Fusion Glass or Fusion Machine Casings§r as long as you have at least §atwo Fluid Input Hatches§r and §aone Fluid Output Hatch§r. It\u0027s possible to use input/output hatches in every valid location, if you prefer.\n\nBecause of this, the quest only asks for §248 Fusion Machine Casings§r. If you want to use the minimum number of fluid hatches, you\u0027ll need to craft an additional §229 Fusion Machine Casings§r. In addition to the §a48 Fusion Machine Casings§r, you will also need §631 Fusion Glass§r or §631 Fusion Machne Casings§r. §bFusion Glass is cheaper, and looks cooler§r, but its your choice.\n\nEach §aEnergy Hatch§r increases the reactor\u0027s power buffer. §2You cannot use 4x or 16x Energy Hatches in Fusion Reactors. §aAll 16 Energy Hatches§r are required to be able to process all Mark 1 recipes and give a power buffer of §e160M EU§r. §2However, not all energy hatches are needed to be connected to power. For example, a recipe that requires LuV power draw would only need one or more hatches connected to power, but a recipe that needs ZPM power draw would need two hatches connected to power.§r §cThey still need to be present on the structure!§r\n\nIn addition to the recipe power drain, Fusion Reactors have a §eheat§r mechanic related to the recipe\u0027s §e\"Eu to Start\"§r. This amount of power is drained from the reactor\u0027s buffer before starting the recipe to heat up the reactor to the necessary temperature, and is independent of the recipe\u0027s EU/t cost. As such, this determines the minimum tier of reactor you need for a recipe.\n\nIf the reactor stops processing, it will §erapidly lose heat§r, even if you pause it with a soft hammer. On the other hand, if the reactor is already at the required temperature for a recipe, §eno additional power§r is required to heat up the reactor! This is true even if you switch between different recipes. This mechanic incentivizes continuous use of the reactor.\n\nIf you switch to a recipe that requires more heat, §eonly the difference§r in heat values is consumed as EU to reach the target heat (up to a maximum heat equal to the reactor\u0027s current buffer).\n\nFusion Reactors §2overclock, but only once per fusion tier, instead of based on energy input.§r They gate the next tier of materials, so you will eventually want to make more than one.", + "desc:8": "Time to get fusing!\n\nThe §3Fusion Reactor§r is a multiblock that uses enormous amounts of energy to fuse fluids into new elements. This one is less flexible than the previous GregTech multiblocks, as you can only put hatches where the preview shows. §6Sneak-right click§r the controller to enable the in-world preview.\n\nThe §bJEI§r preview shows §eall valid hatch locations§r, but you don\u0027t actually need that many fluid hatches. You can replace any of the hatch positions in the structure with §2Fusion Glass or Fusion Machine Casings§r as long as you have at least §atwo Fluid Input Hatches§r and §aone Fluid Output Hatch§r. It\u0027s possible to use input/output hatches in every valid location, if you prefer.\n\nBecause of this, the quest only asks for §248 Fusion Machine Casings§r. If you want to use the minimum number of fluid hatches, you\u0027ll need to craft an additional §229 Fusion Machine Casings§r. In addition to the §a48 Fusion Machine Casings§r, you will also need §631 Fusion Glass§r or §631 Fusion Machne Casings§r. §bFusion Glass is cheaper, and looks cooler§r, but its your choice.\n\nEach §aEnergy Hatch§r increases the reactor\u0027s power buffer. §2You cannot use 4x or 16x Energy Hatches in Fusion Reactors. §aAll 16 Energy Hatches§r are required to be able to process all Mark 1 recipes and give a power buffer of §e160M EU§r. §2However, not all energy hatches are needed to be connected to power. For example, a recipe that requires LuV power draw would only need one or more hatches connected to power, but a recipe that needs ZPM power draw would need two hatches connected to power.§r §cThey still need to be present on the structure!§r\n\nIn addition to the recipe power drain, Fusion Reactors have a §eheat§r mechanic related to the recipe\u0027s §e\"Eu to Start\"§r. This amount of power is drained from the reactor\u0027s buffer before starting the recipe to heat up the reactor to the necessary temperature, and is independent of the recipe\u0027s EU/t cost. As such, this determines the minimum tier of reactor you need for a recipe.\n\nIf the reactor stops processing, it will §erapidly lose heat§r, even if you pause it with a soft hammer. On the other hand, if the reactor is already at the required temperature for a recipe, §eno additional power§r is required to heat up the reactor! This is true even if you switch between different recipes. This mechanic incentivizes continuous use of the reactor.\n\nIf you switch to a recipe that requires more heat, §eonly the difference§r in heat values is consumed as EU to reach the target heat (up to a maximum heat equal to the reactor\u0027s current buffer).\n\nFusion Reactors §2overclock, but only once per fusion tier, instead of based on energy input.§r They gate the next tier of materials, so you will eventually want to make more than one.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16590,12 +16644,12 @@ }, "289:10": { "preRequisiteTypes:7": [ - 0, - 2 + 1, + 0 ], "preRequisites:11": [ - 839, - 313 + 313, + 839 ], "properties:10": { "betterquesting:10": { @@ -17149,7 +17203,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.\n\n", + "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17257,7 +17311,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, a §6Snowball§r, and §6Blizz Powder§r creates §6Cryotheum Dust§r, a mixture imbued with potent elemental frost.", + "desc:8": "§6Redstone§r, a §6Snowball§r, and §6Blizz Powder§r creates §6Cryotheum Dust§r, a mixture imbued with potent elemental frost.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17311,7 +17365,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, §6Saltpeter§r, and §6Blitz Powder§r creates §6Aerotheum Dust§r, a mixture imbued with potent elemental air.", + "desc:8": "§6Redstone§r, §6Saltpeter§r, and §6Blitz Powder§r creates §6Aerotheum Dust§r, a mixture imbued with potent elemental air.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17365,7 +17419,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, §6Obsidian Dust§r, and §6Basalz Powder§r creates §6Petrotheum Dust§r, a mixture imbued with potent elemental earth.", + "desc:8": "§6Redstone§r, §6Obsidian Dust§r, and §6Basalz Powder§r creates §6Petrotheum Dust§r, a mixture imbued with potent elemental earth.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17419,7 +17473,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, §6Sulfur§r, and §6Blaze Powder§r creates §6Pyrotheum Dust§r, a mixture imbued with potent elemental flame.", + "desc:8": "§6Redstone§r, §6Sulfur§r, and §6Blaze Powder§r creates §6Pyrotheum Dust§r, a mixture imbued with potent elemental flame.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17821,12 +17875,13 @@ }, "311:10": { "preRequisites:11": [ - 197 + 201, + 827 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", + "desc:8": "§6RTM-Alloy§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17838,7 +17893,7 @@ "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, - "name:8": "Tungstensteel Coil Blocks", + "name:8": "RTM-Alloy Coil Blocks", "partysinglereward:1": 0, "questlogic:8": "AND", "repeat_relative:1": 1, @@ -17880,7 +17935,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18583,7 +18638,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With a §3Fusion Reactor§r, you can make Europium!\n\nThis element is needed for making things in §bDraconic Evolution§r§r, as well as the §6Fusion Reactor Computer Mark 2§r, §2Crystal Chip growing§r, and §6Wetware Supercomputers§r§r.\n\nYou make it by fusing molten §9§9Neodymium§r§r and §9Hydrogen§r.", + "desc:8": "With a §3Fusion Reactor§r, you can make Europium!\n\nThis element is needed for making things in §bDraconic Evolution§r, as well as the §6Fusion Reactor Computer Mark 2§r, §2Crystal Chip growing§r, and §6Wetware Supercomputers§r.\n\nYou make it by fusing molten §9Neodymium§r and §9Hydrogen§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18676,7 +18731,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.\n", + "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19112,7 +19167,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.\n", + "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19333,7 +19388,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\n§2Starting at EV, 4A Energy and Dynamo hatches are available at each tier.", + "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\nEV motors require a better material than §6Steel§r for its magnetism.§6\n\nNeodynium§r is required, which is mainly achieved from §6Rare Earth§r. The main sources of this are §6Redstone§r, and everything inside of §6Bastnasite§r veins.\n\nEV Machine Hulls unlock a handful of nice things. Check the surrounding quests for more information.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19387,7 +19442,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An Extreme Voltage tier §bGregTech§r battery.\n\n§3§2Higher tier GT Batteries have been buffed to be quite strong - this one holds 25 MEU, or 100 MRF. You may want to consider using them over RF storage.", + "desc:8": "An Extreme Voltage tier §bGregTech§r battery.\n\n§2Higher tier GT Batteries have been buffed to be quite strong - this one holds 25 MEU, or 100 MRF. You may want to consider using them over RF storage.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -20289,7 +20344,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This ingot is the most advanced basic material.\n\nWith all the automation you hopefully set up for your first §c§cInfinity Catalyst§r, these ingots should be easy.\n\nWell, not easy. But... Reasonable.\n\nFrom here, you are going to be crafting a multitude of Creative-Tier items from various mods. In addition to being useful for their regular functionality, they are needed for the final goal: the §dCreative Chest§r.\n\n§bJEI§r is your friend: beyond noting a few more items, I will not be holding your hand anymore. I\u0027ve taught you everything you need to know to beat the pack.\n\nYou can do it!", + "desc:8": "This ingot is the most advanced basic material.\n\nWith all the automation you hopefully set up for your first §cInfinity Catalyst§r, these ingots should be easy.\n\nWell, not easy. But... Reasonable.\n\nFrom here, you are going to be crafting a multitude of Creative-Tier items from various mods. In addition to being useful for their regular functionality, they are needed for the final goal: the §dCreative Chest§r.\n\n§bJEI§r is your friend: beyond noting a few more items, I will not be holding your hand anymore. I\u0027ve taught you everything you need to know to beat the pack.\n\nYou can do it!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -21858,7 +21913,6 @@ }, "389:10": { "preRequisites:11": [ - 251, 262, 386 ], @@ -22380,7 +22434,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nHover over different coil blocks: the higher the §elevel§r, the more items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of level 4 coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r and at least §a1 energy hatch§r of any tier.\n\n", + "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nHover over different coil blocks: the higher the §elevel§r, the more items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of level 4 coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r and at least §a1 energy hatch§r of any tier.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22440,7 +22494,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.", + "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.\n\nGenerally, the best plasma fuels to use will be §eHelium Plasma§r with a §3Fusion Reactor Mk1§r, §eTin Plasma§r when you upgrade to §3Mk2§r, and §eAmericium Plasma§r when you upgrade to §3Mk3§r. However, the other plasmas are still competitive, and your setup might lend itself better to a different plasma.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22613,7 +22667,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine.\n\nThis quest accepts a §aScrewdriver§r and a §aCrowbar§r made of any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §a§lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §a§lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §a§lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §a§lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §a§lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §2§lDetector§r: Available in Item, Fluid, Energy, Activity, and Advanced Activity flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §2§lDigital Interface§r: A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.\n", + "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. These are seperate on each side of the machine, meaning you can have up to six different covers! To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine. This quest accepts a §aScrewdriver§r and §aCrowbar§r made from any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §lDetector§r: Available in §aItem§r, §aFluid§r, §aEnergy§r, and §aActivity§r flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §lAdvanced Detectors§r: Available as §aItem§r, §aFluid§r, §aEnergy§r, or §aActivity§r, these covers can emit redstone in more ways than their normal counterparts. Specifically, the §aItem§r, §aFluid§r, and §aEnergy§r advanced detectors can emit a latched redstone signal based on the amount of item/fluid between a set min and max, or they can emit redstone signals proportional to the amount of item/fluids between a set min and max. The §aAdvanced Activity Detector§r emits redstone proportional to a machines progress on a recipe \n\n- §lDigital Interface§r: A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22852,7 +22906,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §nvastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r on top of each Unpackager. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.\n\n", + "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §nvastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r on top of each Unpackager. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23023,15 +23077,15 @@ "408:10": { "preRequisiteTypes:7": [ 0, + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ 104, + 132, 148, - 386, - 132 + 386 ], "properties:10": { "betterquesting:10": { @@ -23108,7 +23162,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Unlike §aRF power§r, which is safe to transport in any §6conduit§r, §aEU power §r§erequires caution§r. The key is to always §amatch or exceed§r the §eVoltage §rand §eAmperage§r of your power source with your §6cables§r and machines.\n\n§o§4§cNEVER §rhook up your Energy Converter§r to a cable that has fewer §eAmps§r than your Energy Converter or Battery Buffer§r generates. For example, you must use §64x cable§r for a 4A Converter§r, and §616x cable§r for a filled 16-slot Battery Buffer§r. Cables with insufficient amperage rating will §cburn and be destroyed§r. §2Both the multiple-amp-source and multiple-face-input bugs from CE have been fixed - the Energy network now works as intended.§r\n\nSimilarly, your cable must match or exceed the §eVoltage§r of your machines, or they will §cburn and be destroyed§r.\n\n§cNEVER§r connect a machine to excessive §eVoltage§r or it will §cvaporize§r. Touching a §6wire§r with connected §aEU power§r will §cinjure or kill you§r, so for your safety, §euse §6cables§e instead§r!\n\n§2Superconductor-type wires do not damage you in CEu. The 0-loss cables in CE (Conductive Iron, Energetic Alloy, etc.) are considered Superconductors.", + "desc:8": "Unlike §aRF power§r, which is safe to transport in any §6conduit§r, §aEU power §erequires caution§r. The key is to always §amatch or exceed§r the §eVoltage §rand §eAmperage§r of your power source with your §6cables§r and machines.\n\n§cNEVER §rhook up your Energy Converter§r to a cable that has fewer §eAmps§r than your Energy Converter or Battery Buffer§r generates. For example, you must use §64x cable§r for a 4A Converter§r, and §616x cable§r for a filled 16-slot Battery Buffer§r. Cables with insufficient amperage rating will §cburn and be destroyed§r. §2Both the multiple-amp-source and multiple-face-input bugs from CE have been fixed - the Energy network now works as intended.§r\n\nSimilarly, your cable must match or exceed the §eVoltage§r of your machines, or they will §cburn and be destroyed§r.\n\n§cNEVER§r connect a machine to excessive §eVoltage§r or it will §cvaporize§r. Touching a §6wire§r with connected §aEU power§r will §cinjure or kill you§r, so for your safety, §euse §6cables§e instead§r!\n\n§2Superconductor-type wires do not damage you in CEu. The 0-loss cables in CE (Conductive Iron, Energetic Alloy, etc.) are considered Superconductors.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23279,7 +23333,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!\n", + "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26379,7 +26433,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", + "desc:8": "§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26433,7 +26487,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but right now you want it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.", + "desc:8": "§oThis quest accepts any Autoclave from LV to IV.§r\n\nAn §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but most presently you will need it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.\n\n§6Pulsating Crystals§r will be required immediately to make §aSnad§r, the key to infinite fuel.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26472,7 +26526,7 @@ "0:10": { "Count:3": 1, "Damage:2": 125, - "OreDict:8": "", + "OreDict:8": "questbookAutoclave", "id:8": "gregtech:machine" } }, @@ -26668,8 +26722,8 @@ }, "494:10": { "preRequisites:11": [ - 102, - 62 + 62, + 102 ], "properties:10": { "betterquesting:10": { @@ -26917,7 +26971,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When making circuits, you\u0027ll need either molten §9Tin§r, or molten §9Soldering Alloy§r§r§r. §2Soldering Alloy is made in the Mixer with 6 parts Tin Dust, 3 parts Lead Dust and 1 part Antimony Dust.§r You then process it in an §3Extractor §rfor the usual 144mB of fluid per unit.\n\nThe §2Circuit Assembler§r will only consume half as much Soldering Alloy as it would have consumed molten Tin per craft (72mB vs 144mB), so it\u0027s very efficient to use this stuff.\n\n§2Antimony can be directly smelted from Stibnite Ore, allowing you to skip ore processing for this.", + "desc:8": "When making circuits, you\u0027ll need either molten §9Tin§r, or molten §9Soldering Alloy§r. §2Soldering Alloy is made in the Mixer with 6 parts Tin Dust, 3 parts Lead Dust and 1 part Antimony Dust.§r You then process it in an §3Extractor §rfor the usual 144mB of fluid per unit.\n\nThe §2Circuit Assembler§r will only consume half as much Soldering Alloy as it would have consumed molten Tin per craft (72mB vs 144mB), so it\u0027s very efficient to use this stuff.\n\n§2Antimony can be directly smelted from Stibnite Ore, allowing you to skip ore processing for this.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27218,7 +27272,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27272,7 +27326,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Brewery.\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics.", + "desc:8": "§oThis quest accepts any Brewery from LV to IV.§r\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics. §2An alternative and more resource efficient way of making biomass is with a Pyrolyse Oven, Water, and Bio Chaff.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27473,7 +27527,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27654,10 +27708,10 @@ }, "511:10": { "preRequisites:11": [ - 296, - 272, + 18, 26, - 18 + 272, + 296 ], "properties:10": { "betterquesting:10": { @@ -27772,7 +27826,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28367,7 +28421,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Assembling Machine§r.\n\nRequires a bunch of standard circuit components.", + "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Circuit Assembler§r.\n\nRequires a bunch of standard circuit components.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28526,14 +28580,14 @@ }, "527:10": { "preRequisiteTypes:7": [ - 0, 2, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, + 235, 275, - 235 + 311 ], "properties:10": { "betterquesting:10": { @@ -28592,7 +28646,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.\n", + "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28762,7 +28816,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Assembling Machine§r.", + "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Circuit Assembler§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28865,14 +28919,14 @@ }, "533:10": { "preRequisiteTypes:7": [ + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 535, - 536, - 325 + 536 ], "properties:10": { "betterquesting:10": { @@ -28988,7 +29042,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Assembling Machine§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.\n", + "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nThis is the first tier of Circuit which must be §2researched§r in the §3Research Station§r.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Circuit Assembler§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29042,7 +29096,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dStabilized Miners§r. Multiblock hatches are a different matter: feel free to upgrade your Multiblocks to Ultimate Voltage, or even higher, if you can handle the power drain.\n", + "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dStabilized Miners§r. Multiblock hatches are a different matter: feel free to upgrade your Multiblocks to Ultimate Voltage, or even higher, if you can handle the power drain.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29238,9 +29292,9 @@ "540:10": { "preRequisites:11": [ 21, + 76, 147, - 259, - 76 + 259 ], "properties:10": { "betterquesting:10": { @@ -29349,8 +29403,8 @@ "542:10": { "preRequisites:11": [ 197, - 296, - 209 + 209, + 296 ], "properties:10": { "betterquesting:10": { @@ -29410,7 +29464,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29610,7 +29664,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Distillery. §2If you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r.§r \n\nHowever, the Distillation Tower is mandatory for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nCan\u0027t avoid it forever!\n\n", + "desc:8": "Note: this quest accepts both LV and MV Distillery. §2If you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r.§r \n\nHowever, the Distillation Tower is mandatory for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nCan\u0027t avoid it forever!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29775,7 +29829,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", + "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29835,6 +29889,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "extrautils2:angelblock" + } + }, + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -30198,7 +30270,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§cThe 4.5th Micro Miner.§r\n\nAll of the Tier Four missions require §68 Quantum Flux§r and a stack of §6Aerotheum Dust§r.\n\nThis miner will be your primary source of mob drops, for all, if not most, of your game.\n\nWhen equipped with a §6Sapling§r:\n§6* Creeper, Skeleton and Zombie skulls\n* Bone\n* Rotten Flesh\n* Gunpowder\n* Slime Block\n* Guardian Scale§r\n\nWhen equipped with a §6Block of Netherrack:\n* Wither Skeleton Skull and Bones\n* Blaze Rod\n* Blizz, Blitz and Basalz Rods\n* Ghast Tear\n* Magma Cream\n* Drop of Evil§r\n\nWhen equipped with a §6Block of Endstone:\n* Enderman Skull\n* Enderpearl Block\n* Shulker Shell\n* Shulker Pearl§r\n\nWhen equipped with §6Ender Eyes:\n* Dragon Lair Data\n* Ender Dragon Head§r\n\nWhen equipped with §6Wither Bones§r:\n§6* Wither Realm Data\n* Nether Star Block\n", + "desc:8": "§cThe 4.5th Micro Miner.§r\n\nAll of the Tier Four missions require §68 Quantum Flux§r and a stack of §6Aerotheum Dust§r.\n\nThis miner will be your primary source of mob drops, for all, if not most, of your game.\n\nWhen equipped with a §6Sapling§r:\n§6* Creeper, Skeleton and Zombie skulls\n* Bone\n* Rotten Flesh\n* Gunpowder\n* Slime Block\n* Guardian Scale§r\n\nWhen equipped with a §6Block of Netherrack:\n* Wither Skeleton Skull and Bones\n* Blaze Rod\n* Blizz, Blitz and Basalz Rods\n* Ghast Tear\n* Magma Cream\n* Drop of Evil§r\n\nWhen equipped with a §6Block of Endstone:\n* Enderman Skull\n* Enderpearl Block\n* Shulker Shell\n* Shulker Pearl§r\n\nWhen equipped with §6Ender Eyes:\n* Dragon Lair Data\n* Ender Dragon Head§r\n\nWhen equipped with §6Wither Bones§r:\n§6* Wither Realm Data\n* Nether Star Block", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31174,7 +31246,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils do not give speed bonuses, they just increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nTo compensate, you\u0027ll need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.\n\n", + "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils do not give speed bonuses, they just increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nTo compensate, you\u0027ll need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31266,7 +31338,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31320,7 +31392,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31374,7 +31446,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31428,7 +31500,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31483,7 +31555,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31537,7 +31609,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31592,7 +31664,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31646,7 +31718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31738,7 +31810,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31792,7 +31864,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31846,7 +31918,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31900,7 +31972,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31954,7 +32026,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32008,7 +32080,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32062,7 +32134,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32116,7 +32188,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32170,7 +32242,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32225,7 +32297,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32279,7 +32351,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32333,7 +32405,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -32387,7 +32459,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32606,7 +32678,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r. \n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.\n", + "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r. \n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32664,9 +32736,9 @@ "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 32028, + "Damage:2": 28, "OreDict:8": "", - "id:8": "gregtech:wire_single" + "id:8": "nomilabs:wire_single" }, "ignoresview:1": 0, "ismain:1": 1, @@ -32698,9 +32770,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32028, + "Damage:2": 28, "OreDict:8": "", - "id:8": "gregtech:wire_single" + "id:8": "nomilabs:wire_single" } }, "taskID:8": "bq_standard:retrieval" @@ -32930,7 +33002,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32984,7 +33056,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33038,7 +33110,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33092,7 +33164,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33146,7 +33218,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33200,7 +33272,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33255,7 +33327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33310,7 +33382,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33364,7 +33436,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33418,7 +33490,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33472,7 +33544,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33526,7 +33598,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33580,7 +33652,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33634,7 +33706,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33688,7 +33760,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33742,7 +33814,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33796,7 +33868,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33850,7 +33922,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33904,7 +33976,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33958,7 +34030,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34012,7 +34084,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34066,7 +34138,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34120,7 +34192,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34174,7 +34246,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34228,7 +34300,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34282,7 +34354,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34336,7 +34408,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34390,7 +34462,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34444,7 +34516,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34498,7 +34570,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34552,7 +34624,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34606,7 +34678,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34660,7 +34732,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34714,7 +34786,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34768,7 +34840,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34822,7 +34894,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34876,7 +34948,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -34930,7 +35002,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34985,7 +35057,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35039,7 +35111,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35093,7 +35165,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35147,7 +35219,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35201,7 +35273,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35255,7 +35327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35309,7 +35381,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35363,7 +35435,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35417,7 +35489,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35471,7 +35543,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35525,7 +35597,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35579,7 +35651,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35633,7 +35705,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35687,7 +35759,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35741,7 +35813,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35795,7 +35867,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35849,7 +35921,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35904,7 +35976,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35958,7 +36030,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6§6Plutonium 239§r, and §6Plutonium 241§r.", + "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6Plutonium 239§r, and §6Plutonium 241§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36083,7 +36155,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6§6Neptunium 236§r, and §6Neptunium 237§r.", + "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6Neptunium 236§r, and §6Neptunium 237§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36143,7 +36215,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\n", + "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\nYou may find Red Granite as a viable source of Uranium-238 if you are able to process it in large enough volumes to offset the low base chance.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36203,7 +36275,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.\n", + "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36314,8 +36386,8 @@ "675:10": { "preRequisites:11": [ 669, - 674, - 673 + 673, + 674 ], "properties:10": { "betterquesting:10": { @@ -36434,7 +36506,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", + "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36692,7 +36764,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §2CEu§r§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDML§r for easy infinite resources\n- §6Omnicoins§r can\u0027t be spent\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", + "desc:8": "The §2CEu§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDML§r for easy infinite resources\n- §6Omnicoins§r can\u0027t be spent\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36785,7 +36857,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.\n\nThis will not be needed now. In fact, its only use is for §6Solar Panels§r. The §6Carbon Mesh§r has some uses though.\n", + "desc:8": "§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.\n\nThis will not be needed now. In fact, its only use is for §6Solar Panels§r. The §6Carbon Mesh§r has some uses though.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38786,13 +38858,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §b§b§6Ore Byproduct Page§6§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and a guaranteed 3 tiny piles of byproduct. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3§3Centrifuge§r: separates Pure or Impure dusts into the final material, producing a guaranteed §21 (nerfed from 3) tiny pile of byproduct§r.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 3 additional tiny piles of byproduct, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.\n", + "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §6Ore Byproduct Page§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and 1/3 of a byproduct dust. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3Centrifuge§r: separates Pure or Impure dusts into the final material, producing 1/9 byproduct dust.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 1/3 byproduct dust, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 4, + "Damage:2": 39, "OreDict:8": "", - "id:8": "gregtech:meta_dust_tiny" + "id:8": "gregtech:meta_dust" }, "ignoresview:1": 0, "ismain:1": 0, @@ -38826,7 +38898,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nEnder Pearls are best gotten through §3Ender Lilies§r. You need §6Pulsating Dust§r for many things.\n\n", + "desc:8": "§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nEnder Pearls are best gotten through §3Ender Lilies§r. You need §6Pulsating Dust§r for many things.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38935,7 +39007,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.\n\n", + "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38975,7 +39047,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them.\n\n", + "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39569,12 +39641,12 @@ }, "745:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, - 235 + 235, + 311 ], "properties:10": { "betterquesting:10": { @@ -39617,9 +39689,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32010, + "Damage:2": 10, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" } }, "taskID:8": "bq_standard:retrieval" @@ -39716,7 +39788,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r.\n\n", + "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39770,7 +39842,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A §3Compactor§r§r§r specialized to a §aGear Press§r is a very power efficient way to make gears. It is slower than its overclocking GTCE counterparts, but is required for some gears, most notably the crystal and gemstone ones.\n\nLike all §aAugments§r, the Gear Press specialization takes up an upgrade slot, but you can still use the rest of the slots for other ones like speed upgrades.", + "desc:8": "A §3Compactor§r specialized to a §aGear Press§r is a very power efficient way to make gears. It is slower than its overclocking GTCE counterparts, but is required for some gears, most notably the crystal and gemstone ones.\n\nLike all §aAugments§r, the Gear Press specialization takes up an upgrade slot, but you can still use the rest of the slots for other ones like speed upgrades.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39819,14 +39891,14 @@ }, "749:10": { "preRequisites:11": [ + 535, 802, - 846, - 535 + 846 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", + "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39898,13 +39970,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r.\n\n§6Enderium§r doesn\u0027t require much power (running on as little as MV) but it does need a lot of heat and is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.\n\n", + "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r, or a §2Alloy Blast Smelter§r.\n\n§6Enderium§r is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 167, + "Damage:2": 18, "OreDict:8": "", - "id:8": "thermalfoundation:material" + "id:8": "nomilabs:meta_ingot" }, "ignoresview:1": 0, "ismain:1": 1, @@ -39936,9 +40008,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32018, + "Damage:2": 18, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" } }, "taskID:8": "bq_standard:retrieval" @@ -39952,7 +40024,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Aqueous Accumulators§r in §5Nomifactory§r are infinite water sources; they §l§ndo not§r require any water blocks nearby.\n\nThis machine can produce §9Water§r as fast as you can extract it (the only downside being that it makes some annoying noises).\n\nFriendship with §aEndervoirs§r ended.", + "desc:8": "§3Aqueous Accumulators§r in §5Nomifactory§r are infinite water sources; they §ndo not§r require any water blocks nearby.\n\nThis machine can produce §9Water§r as fast as you can extract it (the only downside being that it makes some annoying noises).\n\nFriendship with §aEndervoirs§r ended.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40178,15 +40250,15 @@ }, "1:10": { "Count:3": 2, - "Damage:2": 32018, + "Damage:2": 18, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" }, "2:10": { "Count:3": 3, - "Damage:2": 32010, + "Damage:2": 10, "OreDict:8": "", - "id:8": "gregtech:meta_nugget" + "id:8": "nomilabs:meta_nugget" } }, "taskID:8": "bq_standard:retrieval" @@ -40375,7 +40447,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Taranium§r is an exotic material found in tiny quantities from... §6Stone Dust§r.\n\nProcess Stone Dust through a long chain (and enjoy the byproducts), and eventually, you\u0027ll reach the §6Taranium Dust§r. It\u0027s used in several powerful endgame tools, such as §6UV Field Generator§r and §3Advanced Ore Drilling Plant II§r. ", + "desc:8": "§6Taranium§r is an exotic material found in tiny quantities from... §6Stone Dust§r.\n\nProcess Stone Dust through a long chain (and enjoy the byproducts), and eventually, you\u0027ll reach the §6Taranium Dust§r. It\u0027s used in several powerful endgame tools, such as §6UV Field Generator§r and §3Advanced Ore Drilling Plant II§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40620,7 +40692,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.\n\n", + "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40658,9 +40730,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32001, + "Damage:2": 1, "OreDict:8": "", - "id:8": "gregtech:meta_dust" + "id:8": "nomilabs:meta_dust" }, "1:10": { "Count:3": 3, @@ -40838,7 +40910,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Circuits along this line are LV, and can all be substituted in recipes.\n\n§7§2Electronic Circuits§r are the worst in terms of cost and effort required to produce, but you have to start with something.\n\n§2§2Integrated Circuits§r are the middle layer between §2Electronic Circuits and Microprocessors.§r\n\nAnd finally, §2Microprocessors§r, which take the lowest effort.", + "desc:8": "Circuits along this line are LV, and can all be substituted in recipes.\n\n§2Electronic Circuits§r are the worst in terms of cost and effort required to produce, but you have to start with something.\n\n§2Integrated Circuits§r are the middle layer between §2Electronic Circuits and Microprocessors.§r\n\nAnd finally, §2Microprocessors§r, which take the lowest effort.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41068,7 +41140,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.\n", + "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41249,7 +41321,7 @@ "0:10": { "Count:3": 1, "Damage:2": 440, - "OreDict:8": "", + "OreDict:8": "questbookLathe", "id:8": "gregtech:machine" } }, @@ -41307,7 +41379,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Awakened Cores§6§r are the third tier of §bDraconic Evolution§r core, and are common components of endgame recipes.\n\nThese cores are made with §6Awakened Draconium§r and also cost §e3 Billion RF§r to craft.", + "desc:8": "§6Awakened Cores§r are the third tier of §bDraconic Evolution§r core, and are common components of endgame recipes.\n\nThese cores are made with §6Awakened Draconium§r and also cost §e3 Billion RF§r to craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41361,7 +41433,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A gear forged from §6Empowered Diamantine Crystal§6§r.\n\nMade from fluid solidification.", + "desc:8": "A gear forged from §6Empowered Diamantine Crystal§r.\n\nMade from fluid solidification.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41415,7 +41487,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy. \n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and information on how to setup the §6Pylons§r and §6Stabilizers§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, § the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nYou might want to postpone the Tier 8 until after you reach the §dStabilized Micro Miners§r, as it requires large amounts of §6Awakened Draconium§r.\n\n", + "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy. \n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and information on how to setup the §6Pylons§r and §6Stabilizers§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nYou might want to postpone the Tier 8 until after you reach the §dStabilized Micro Miners§r, as it requires large amounts of §6Awakened Draconium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41481,7 +41553,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Cobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Netherrack§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.\n", + "desc:8": "Cobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Netherrack§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41552,7 +41624,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §eNether§r contains quite a few useful resources:\n- Some initial pieces of §6Sulfur§r\n- §6Glowstone§r and §6Soul Sand§r\n- §6Fluorine§r, §6Certus Quartz§r, §6Molybdenum§r, §6Antimony§r, and §6Gold§r-bearing ores\n- §9§2Nether Air§r, which can be distilled for useful gases\n- §eLava§r and §eNatural Gas§r from §2Fluid Rigs\n\n§rNether ores also contain §ddouble§r the resources per ore block compared to Overworld ores.", + "desc:8": "The §eNether§r contains quite a few useful resources:\n- Some initial pieces of §6Sulfur§r\n- §6Glowstone§r and §6Soul Sand§r\n- §6Fluorine§r, §6Certus Quartz§r, §6Molybdenum§r, §6Antimony§r, and §6Gold§r-bearing ores\n- §2Nether Air§r, which can be distilled for useful gases\n- §eLava§r and §eNatural Gas§r from §2Fluid Rigs\n\n§rNether ores also contain §ddouble§r the resources per ore block compared to Overworld ores.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41609,14 +41681,14 @@ "preRequisiteTypes:7": [ 0, 0, - 2, - 0 + 0, + 2 ], "preRequisites:11": [ 196, + 286, 531, - 828, - 286 + 828 ], "properties:10": { "betterquesting:10": { @@ -41708,7 +41780,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aRotor§r to go into each §3Rotor Holder§r§r. The Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Rotor also has a Durability, which is the number of seconds it will last.\n\n§aExample: §r§6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", + "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aRotor§r to go into each §3Rotor Holder§r. The Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Rotor also has a Durability, which is the number of seconds it will last.\n\n§aExample: §6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41747,7 +41819,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "These are the basic cables used by §3Applied Energistics§r to transport network connectivity. Due to the fact that channels are disabled, these cables will be your main method of transporting network connectivity, rather than the dense cables.\n\nThese cables do not share blockspace with conduits or cables for other mods, so they can be somewhat unweildy to build with, but they do accept §3Applied Energistics§r§6§r §6Facades§r, so they can be hidden very easily.\n\nLater you can make a variant of the cable that can share blockspace with §3Ender IO§r conduits.", + "desc:8": "These are the basic cables used by §3Applied Energistics§r to transport network connectivity. Due to the fact that channels are disabled, these cables will be your main method of transporting network connectivity, rather than the dense cables.\n\nThese cables do not share blockspace with conduits or cables for other mods, so they can be somewhat unweildy to build with, but they do accept §3Applied Energistics§r §6Facades§r, so they can be hidden very easily.\n\nLater you can make a variant of the cable that can share blockspace with §3Ender IO§r conduits.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41800,7 +41872,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§9§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.\n\n", + "desc:8": "§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41897,7 +41969,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.\n\n", + "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41950,7 +42022,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.\n", + "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42003,7 +42075,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", + "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42068,7 +42140,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.\n", + "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42122,7 +42194,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.\n\n", + "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42348,7 +42420,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -42372,6 +42444,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 598, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, @@ -42592,9 +42682,9 @@ }, "1:10": { "Count:3": 2, - "Damage:2": 32010, + "Damage:2": 10, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" }, "2:10": { "Count:3": 3, @@ -42650,7 +42740,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6§3Pyrolyse Oven§r can make more interesting products than just §9Phenol§r.\n\n§a§9Charcoal Byproducts§r breaks down into various wood products, such as§9 Wood Tar§r,§9 Wood Gas§r, and §a§9Wood Vinegar§r, each of which can be further broken down into various useful chemical compounds, such as §a§9Toluene§r, §a§9Methanol§r, etc.\n\nHowever, to take full advantage of decomposing these wood products, a §6§3Distillation Tower§r is required, so that all possible outputs can be obtained. You will need more§e Distillation Tower Slices§r than requested in the§r Distillation Tower quest, so be prepared to spend some more §6Stainless Steel§r.", + "desc:8": "The §3Pyrolyse Oven§r can make more interesting products than just §9Phenol§r.\n\n§9Charcoal Byproducts§r breaks down into various wood products, such as§9 Wood Tar§r,§9 Wood Gas§r, and §9Wood Vinegar§r, each of which can be further broken down into various useful chemical compounds, such as §9Toluene§r, §9Methanol§r, etc.\n\nHowever, to take full advantage of decomposing these wood products, a §3Distillation Tower§r is required, so that all possible outputs can be obtained. You will need more§e Distillation Tower Slices§r than requested in the§r Distillation Tower quest, so be prepared to spend some more §6Stainless Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42771,7 +42861,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r§r.\n\nTo create a portal, you must place a §aBed§r§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r§r You can use the §e/sethome§r§r command to register where your house is, and §e/home§r§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r§r. §6Skeleton Skulls§r would be the way to go in that case.", + "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r.\n\nTo create a portal, you must place a §aBed§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r You can use the §e/sethome§r command to register where your house is, and §e/home§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r. §6Skeleton Skulls§r would be the way to go in that case.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43091,7 +43181,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6§6§6Interfaces§r§r§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.", + "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6Interfaces§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43125,12 +43215,13 @@ }, "810:10": { "preRequisites:11": [ - 60 + 60, + 837 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Vanadium Pentoxide§r is a catalyst used in the production of §9Sulfuric Acid§r and §9Phthalic Anhydride§r. \n", + "desc:8": "§6Vanadium Pentoxide§r is a catalyst used in the production of §9Sulfuric Acid§r and §9Phthalic Anhydride§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43312,7 +43403,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack!", + "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack. However, at §5EV§r, the Arc Furnace expands to 9 slots.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43419,7 +43510,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.\n", + "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44007,7 +44098,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The §3§2Large Chemical Reactor (LCR)§r §2is a multiblock §3§2Chemical Reactor§r §2with more input/output slots.§r\n\nThe §3LCR§r can perform some exclusive reactions which allow you to combine multiple normal §3Chemical Reactor§r steps into a §6single step§r, such as:\n- §aNitrogen Dioxide§r\n- §r§aSulfuric Acid§r\n-§r §aEpichlorohydrin§r, needed for...\n-§r §aEpoxy§r\n\nThe §3LCR§r also is required to perform some recipes, such as §aRaw Gasoline§r production.\n\nAny other recipe which could be done in a normal §9Chemical Reactor§r, as well as certain §9Mixer§r recipes, can also be done in an §3LCR§r.\n\nAll §dOverclocks§r in the §3LCR§r are §6100% efficient§r; each overclock will §5quadruple the speed§r, as opposed to doubling it.", + "desc:8": "§2The §2Large Chemical Reactor (LCR)§r §2is a multiblock §2Chemical Reactor§r §2with more input/output slots.§r\n\nThe §3LCR§r can perform some exclusive reactions which allow you to combine multiple normal §3Chemical Reactor§r steps into a §6single step§r, such as:\n- §aNitrogen Dioxide§r\n- §aSulfuric Acid§r\n-§r §aEpichlorohydrin§r, needed for...\n-§r §aEpoxy§r\n\nThe §3LCR§r also is required to perform some recipes, such as §aRaw Gasoline§r production.\n\nAny other recipe which could be done in a normal §9Chemical Reactor§r, as well as certain §9Mixer§r recipes, can also be done in an §3LCR§r.\n\nAll §dOverclocks§r in the §3LCR§r are §6100% efficient§r; each overclock will §5quadruple the speed§r, as opposed to doubling it.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44073,12 +44164,13 @@ }, "827:10": { "preRequisites:11": [ + 65, 177 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A rudimentary version of Platinum Group Sludge (PGS) processing existed in the base pack. Here, it is a strong source of the Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum - as well as Gold. All of these elements will be used in IV-tier and above materials.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.", + "desc:8": "The §6Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum§r - are rare materials used in upcoming recipes. §6Ruthenium§r will be required now for the next tier of coils.\n\nThese materials can be obtained from ores exclusive to Microverse missions - §6Laurite Ore§r for Ruthenium, §6Cuprorhodsite Ore§r for Rhodium, and §6Osmiridium Ore§r and §6Iridosmine Ore§r for Osmium and Iridium. However, the yields of these ores from Microverse missions are small, so you should consider processing §6Platinum Group Sludge (PGS)§r for more.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44091,7 +44183,7 @@ "issilent:1": 0, "lockedprogress:1": 0, "name:8": "§2Platinum Group Processing", - "questlogic:8": "AND", + "questlogic:8": "OR", "repeat_relative:1": 1, "repeattime:3": -1, "simultaneous:1": 0, @@ -44117,16 +44209,40 @@ "Count:3": 1, "Damage:2": 93, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" - }, - "1:10": { - "Count:3": 1, - "Damage:2": 90, - "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "gregtech:meta_dust" } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 90, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + }, + "1:10": { + "Count:3": 1, + "Damage:2": 75, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + }, + "2:10": { + "Count:3": 1, + "Damage:2": 50, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + } + }, + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -44137,7 +44253,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is the highest tier of polymer. It is used in crafting Advanced SMD components, ZPM+ Machine Hulls, among other things.\n\nThis polymer requires at least 14 processing steps to craft. Good luck!", + "desc:8": "This is the highest tier of polymer. It is used in crafting §2Advanced SMD components and ZPM+ Machine Hulls,§r among other things.\n\nThis polymer can require up to §914 steps§r to create from scratch, but multiple steps are able to be skipped through distillation of various liquids. §6Check what steps you can easily skip!§r", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44238,12 +44354,12 @@ }, "830:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 93, - 89 + 89, + 93 ], "properties:10": { "betterquesting:10": { @@ -44354,7 +44470,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §o§c§opull§r fluids from the world location it is attached to, while Export will §o§9§opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.\n", + "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §opull§r fluids from the world location it is attached to, while Export will §opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44426,7 +44542,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §a§lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §a§lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §a§lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §a§lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", + "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44647,7 +44763,6 @@ "837:10": { "preRequisites:11": [ 91, - 810, 836 ], "properties:10": { @@ -44707,7 +44822,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Systems on Chip can be engraved with HV power and Glowstone Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", + "desc:8": "§2Systems on Chip can be engraved with HV power and Phosphorus Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44726,7 +44841,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -44741,6 +44856,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 572, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -44811,14 +44944,14 @@ }, "840:10": { "preRequisiteTypes:7": [ + 1, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 791, - 841, - 325 + 841 ], "properties:10": { "betterquesting:10": { @@ -45037,7 +45170,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.\n", + "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45091,7 +45224,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A heavy Naquadah isotope with more nuclear capability.\n\n§r§6Enriched Naquadah§r is meant to be used in as-of-yet-unimplemented CEu-native reactors. It\u0027s used in small amounts for §3Trinium Coil blocks§r, or in Nomi reactors, though Naquadria is better for that purpose.\n\nAt least it\u0027s the easiest to obtain, and you can get it by mixing, the full Naquadah chain, or by passing Purified Naquadah Dust through an Electromagnetic Separator.", + "desc:8": "§2A heavy Naquadah isotope with more nuclear capability.\n\n§6Enriched Naquadah§r is meant to be used in as-of-yet-unimplemented CEu-native reactors. It\u0027s used in small amounts for §3Trinium Coil blocks§r, or in Nomi reactors, though Naquadria is better for that purpose.\n\nAt least it\u0027s the easiest to obtain, and you can get it by mixing, the full Naquadah chain, or by passing Purified Naquadah Dust through an Electromagnetic Separator.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45144,7 +45277,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§r§6Naquadria§o§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", + "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§6Naquadria§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45198,7 +45331,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A strong heavy element obtained from the Naquadah chain.\n\n§r§6Trinium§r can come from §6Kaemanite Ore§r, but you will probably want to bolster its production with §6Naquadah Dust§r processing. It comes out at the second stage, so if you don\u0027t mind storing the intermediates and have Fluorine under control, you can hold off doing the full chain if you don\u0027t need to yet. You get §d1 Trinium per 6 Naquadah processed§r.\n\nThis will be required in large quantities for §6Trinium Coils§r, §6Superconducting Coil Blocks§r, §6Naquadah Alloy§r, among other things. You will need 14 stacks at least for a §3Fusion Reactor Mk1§r, so stock up on it.", + "desc:8": "§2A strong heavy element obtained from the Naquadah chain.\n\n§6Trinium§r can come from §6Kaemanite Ore§r, but you will probably want to bolster its production with §6Naquadah Dust§r processing. It comes out at the second stage, so if you don\u0027t mind storing the intermediates and have Fluorine under control, you can hold off doing the full chain if you don\u0027t need to yet. You get §d1 Trinium per 6 Naquadah processed§r.\n\nThis will be required in large quantities for §6Trinium Coils§r, §6Superconducting Coil Blocks§r, §6Naquadah Alloy§r, among other things. You will need 14 stacks at least for a §3Fusion Reactor Mk1§r, so stock up on it.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45304,7 +45437,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Used for Advanced SMD components.", + "desc:8": "The §6IV Assembling Machine§r is required for§2 Advanced SMD components§r.\n\nConsider upgrading to a §6Large Assembling Factory§r, which is easier to upgrade and can accept Parallel Control Hatches. The §6Large Assembing Factory§r §ccannot be recipe tier overclocked§r, as it only accepts one Energy hatch. You will need to craft higher tier standard Assembling Machines for some higher tier items.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45721,7 +45854,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -45745,6 +45878,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 599, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, @@ -45755,7 +45906,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Used in building the Alloy Blast Smelter. \n\n§r§6Tantalum§r is obtained from §6Tantalite Ore§r, or in small quantities from centrifuging §eLava§r.\n\n§6Molybdenum§r is obtained from §6Molybdenum, Molybdenite, Powellite, and Wulfenite ores§r. They spawn together in the §eNether§r rarely, or some of them come from §3Tier One§r and §3Five Micro Miners§r.\n\n§2Remember, you need an appropriately tiered Mixer (HV for HSLA Steel, and EV for the others).", + "desc:8": "§2Used in building the Alloy Blast Smelter. \n\n§6Tantalum§r is obtained from §6Tantalite Ore§r, or in small quantities from centrifuging §eLava§r.\n\n§6Molybdenum§r is obtained from §6Molybdenum, Molybdenite, Powellite, and Wulfenite ores§r. They spawn together in the §eNether§r rarely, or some of them come from §3Tier One§r and §3Five Micro Miners§r.\n\n§2Remember, you need an appropriately tiered Mixer (HV for HSLA Steel, and EV for the others).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45827,7 +45978,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §e§eConductive Iron§r§r, and §e§eDark Steel§r§r.", + "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §eConductive Iron§r, and §eDark Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47039,7 +47190,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Configurable to output any number of GT Volts and Amps.", + "desc:8": "An upgrade from the §6Creative RF Source§r, this can be configured to output any amount of GT Volts and Amps.\n\nThis can also connect to a §bLaser Network§r directly!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47684,7 +47835,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Certain multiblocks in CEu will require a Maintenance Hatch and/or Muffler Hatch. These cannot be shared between multiblocks. If you knew Maintenance in GT5u, fret not - Maintenance mechanics are far less punishing in CEu.\n\n§r- §aMuffler§r: This hatch must be §cunobstructed§r so it can output its beautiful smoke particles. When a recipe is performed, there is a small chance for the §3Muffler Hatch§r to give bonus items, typically tiny Dusts of Ash. It voids excess when full, so do not worry about it stopping machines from running.\n\n- §aMaintenance§r: You will need to do Maintenance for the Multiblock to begin operating. This is done by having a §9Wrench§r, a §9Screwdriver§r, a §9Soft Mallet§r, a §9Hammer§r, a §9Wire Cutter§r, and a §9Crowbar§r in your inventory, opening the Maintenance Hatch and §eclicking the center spot once§r. §cNo need to move tools individually§r. Alternatively, you can fix problems by placing §9Tape§r in the Maintenance Hatch. \n\nMaintenance problems may occur after §d48 real hours of activity§r. Needless to say, they are very rare. Each problem increases the recipe durations by 10%. Fixing the problems is done the same way as above.\n\nLater, you will unlock other Maintenance Hatches that do not enforce fixing the problems manually. Both start with §6no Maintenance required§r:\n\n- §3Automatic Maintenance Hatch§r (§1IV§r): Eliminates the need for Maintenance, §6forever§r.\n\n- §3Configurable Maintenance Hatch§r (§6HV§r): You can configure it to cut off §a10% duration§r on recipes, at the cost of making Maintenance issues happen three times as fast. That is §d16 real hours§r of activity. §9Tape§r can fix problems in this Hatch as well.\n", + "desc:8": "§2Certain multiblocks in CEu will require a Maintenance Hatch and/or Muffler Hatch. These cannot be shared between multiblocks. If you knew Maintenance in GT5u, fret not - Maintenance mechanics are far less punishing in CEu.\n\n§r- §aMuffler§r: This hatch must be §cunobstructed§r so it can output its beautiful smoke particles. When a recipe is performed, there is a small chance for the §3Muffler Hatch§r to give bonus items, typically tiny Dusts of Ash. It voids excess when full, so do not worry about it stopping machines from running.\n\n- §aMaintenance§r: You will need to do Maintenance for the Multiblock to begin operating. This is done by having a §9Wrench§r, a §9Screwdriver§r, a §9Soft Mallet§r, a §9Hammer§r, a §9Wire Cutter§r, and a §9Crowbar§r in your inventory, opening the Maintenance Hatch and §eclicking the center spot once§r. §cNo need to move tools individually§r. Alternatively, you can fix problems by placing §9Tape§r in the Maintenance Hatch. \n\nMaintenance problems may occur after §d48 real hours of activity§r. Needless to say, they are very rare. Each problem increases the recipe durations by 10%. Fixing the problems is done the same way as above.\n\nLater, you will unlock other Maintenance Hatches that do not enforce fixing the problems manually. Both start with §6no Maintenance required§r:\n\n- §3Automatic Maintenance Hatch§r (§1IV§r): Eliminates the need for Maintenance, §6forever§r.\n\n- §3Configurable Maintenance Hatch§r (§6HV§r): You can configure it to cut off §a10% duration§r on recipes, at the cost of making Maintenance issues happen three times as fast. That is §d16 real hours§r of activity. §9Tape§r can fix problems in this Hatch as well.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47884,13 +48035,14 @@ }, "897:10": { "preRequisites:11": [ + 52, 830, 896 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2With Silver, LPICs, NaK, and an HV Assembler, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.", + "desc:8": "With §6Silver, LPICs§r, §9NaK§r, and an §6HV Assembler§r, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.\n\nLook out for a new more efficient EV-tier recipe for §6Steel§r in the EBF.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48144,7 +48296,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Tablet device you now get is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, §9§9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",\n", + "desc:8": "§2The Tablet device you now get is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, §9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48256,7 +48408,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The coil recipes are harder in CEu, not only do they require their base material, they also need some extra material types and they must be made in Assembling Machines of their tier.\n\nFor Cupronickel Coils, you will need 8 Cupronickel, 2 Bronze, and 1 Tin Alloy for each coil. You need 16 for the Electric Blast Furnace and 16 for the Pyrolyse Oven. That totals to 176 Copper, 128 Nickel, 32 Tin, and 16 Iron.", + "desc:8": "§6Cupronickel Coils§r form part of the structure of a few multiblocks. Presently, those are the §3Electric Blast Furnace§r and §3Pyrolyse Oven§r. Each tier of coil unlocks new recipes and provides various bonuses to the multiblock they are attached to.\n\nCupronickel Coils are produced in the §3Assembler§r with §62x Cupronickel Wire§r, §6Bronze Foil§r, and §9Tin Alloy fluid§r.\n\nFor now, you need 16 coils for the §3Electric Blast Furnace§r and 16 for the §3Pyrolyse Oven§r. That totals to §6176 Copper§r, §6128 Nickel§r, §632 Tin§r, and §616 Iron§r.\n\nHave fun mining!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48415,7 +48567,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily.", + "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily. \n\nNote that like the Large Assembling Machine, the Large Circuit Assembler §ccannot use more than one Energy Hatch§2, preventing it from recipe tier overclocking.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48675,7 +48827,7 @@ }, "911:10": { "preRequisites:11": [ - 409 + 38 ], "properties:10": { "betterquesting:10": { @@ -48728,8 +48880,8 @@ }, "912:10": { "preRequisites:11": [ - 344, - 233 + 233, + 344 ], "properties:10": { "betterquesting:10": { @@ -48908,9 +49060,9 @@ }, "915:10": { "preRequisites:11": [ + 62, 494, - 729, - 62 + 729 ], "properties:10": { "betterquesting:10": { @@ -49016,11 +49168,11 @@ }, "917:10": { "preRequisites:11": [ - 62, - 230, - 148, 54, - 132 + 62, + 132, + 148, + 230 ], "properties:10": { "betterquesting:10": { @@ -49087,8 +49239,8 @@ }, "918:10": { "preRequisites:11": [ - 917, - 391 + 391, + 917 ], "properties:10": { "betterquesting:10": { @@ -49198,14 +49350,14 @@ }, "920:10": { "preRequisiteTypes:7": [ - 2, 0, - 0 + 0, + 2 ], "preRequisites:11": [ - 848, 239, - 776 + 776, + 848 ], "properties:10": { "betterquesting:10": { @@ -49313,9 +49465,9 @@ }, "922:10": { "preRequisites:11": [ - 757, + 150, 174, - 150 + 757 ], "properties:10": { "betterquesting:10": { @@ -49461,7 +49613,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this. ", + "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49597,7 +49749,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A brand new and highly requested mod to CEu to help you manage your tools!§r\n\nThe §eTool Belt§r is a item, which can store your tools, and exchange them easily! Right now, it has 2 slots, but later, once you unlock §6Steel§r, you can upgrade it with §6Belt Pouches§r, all the way to 9 slots, with an §3Anvil§r and some §aXP§r!\n\nMake the Tool Belt, and you can use the keybind (default is `R\u0027), while the belt is in your inventory or Bauble Slots §cand you are holding something, or the belt is not empty§r, to open its GUI. \n\nAlternatively, you can right click while holding the belt to open its inventory.\n\nThe Tool Belt is equipable as a §bBauble§r. Open your inventory and look for the Baubles button, and click it to reveal the additional bauble slots menu, and then put it in the Belt Slot. Or, just click in every bauble slot until it goes in, if you can\u0027t tell which bauble slot looks like a belt.\n\nThe Tool Belt can store anything with a stack size of 1, like swords, pickaxes, §bGregTech§r tools, and the §6Terminal§r. It has also been modified a bit, so it also allows any §bStorage Drawers§r key, and §cdoesn\u0027t allow any Thermal Satchel§r.\n\nNow, you can insert and extract from the belt! You can also use the Keybinds `§eCycle Tool Left§r\u0027 and `§eCycle Tool Right§r\u0027 whilst you are in the GUI.\n", + "desc:8": "§2A brand new and highly requested mod to CEu to help you manage your tools!§r\n\nThe §eTool Belt§r is a item, which can store your tools, and exchange them easily! Right now, it has 2 slots, but later, once you unlock §6Steel§r, you can upgrade it with §6Belt Pouches§r, all the way to 9 slots, with an §3Anvil§r and some §aXP§r!\n\nMake the Tool Belt, and you can use the keybind (default is `R\u0027), while the belt is in your inventory or Bauble Slots §cand you are holding something, or the belt is not empty§r, to open its GUI. \n\nAlternatively, you can right click while holding the belt to open its inventory.\n\nThe Tool Belt is equipable as a §bBauble§r. Open your inventory and look for the Baubles button, and click it to reveal the additional bauble slots menu, and then put it in the Belt Slot. Or, just click in every bauble slot until it goes in, if you can\u0027t tell which bauble slot looks like a belt.\n\nThe Tool Belt can store anything with a stack size of 1, like swords, pickaxes, §bGregTech§r tools, and the §6Terminal§r. It has also been modified a bit, so it also allows any §bStorage Drawers§r key, and §cdoesn\u0027t allow any Thermal Satchel§r.\n\nNow, you can insert and extract from the belt! You can also use the Keybinds `§eCycle Tool Left§r\u0027 and `§eCycle Tool Right§r\u0027 whilst you are in the GUI.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49703,7 +49855,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.\n", + "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49753,8 +49905,8 @@ }, "930:10": { "preRequisites:11": [ - 100, - 98 + 98, + 100 ], "properties:10": { "betterquesting:10": { @@ -50223,8 +50375,8 @@ }, "933:10": { "preRequisites:11": [ - 56, - 53 + 53, + 56 ], "properties:10": { "betterquesting:10": { @@ -50340,7 +50492,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionalidy it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", + "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionality it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50563,6 +50715,3426 @@ } }, "939:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 939, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "940:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 940, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "941:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 941, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "942:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 942, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "943:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 943, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "944:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 944, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "945:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 945, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "946:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 946, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "947:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 947, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "948:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 948, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "949:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 949, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "950:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 950, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "951:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 951, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "952:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 952, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "953:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 953, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "954:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 954, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "955:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 955, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "956:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 956, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "957:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 957, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "958:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 958, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "959:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 959, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "960:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 960, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "961:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 961, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "962:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 962, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "963:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 963, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "964:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 964, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "965:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 965, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "966:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 966, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "967:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 967, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "968:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 968, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "969:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 969, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "970:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 970, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "971:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 971, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "972:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 972, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "973:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 973, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "974:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 974, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "975:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 975, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "976:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 976, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "977:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 977, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "978:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 978, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "979:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 979, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "980:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 980, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "981:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 981, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "982:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 982, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "983:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 983, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "984:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 984, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "985:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 985, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "986:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 986, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "987:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 987, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "988:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 988, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "989:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 989, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "990:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 990, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "991:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 991, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "992:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 992, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "993:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 993, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "994:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 994, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "995:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 995, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "996:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 996, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "997:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 997, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "998:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 998, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "999:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 999, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1000:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1000, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1001:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1001, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1002:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1002, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1003:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1003, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1004:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1004, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1005:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1005, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1006:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1006, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1007:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1007, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1008:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1008, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1009:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1009, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1010:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1010, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1011:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1011, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1012:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1012, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1013:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1013, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1014:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1014, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1015:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1015, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1016:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1016, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1017:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1017, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1018:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1018, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1019:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1019, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1020:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1020, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1021:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1021, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1022:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1022, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1023:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1023, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1024:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1024, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1025:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1025, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1026:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1026, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1027:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1027, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1028:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1028, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1029:10": { "preRequisites:11": [ 192 ], @@ -50621,7 +54193,7 @@ } } }, - "940:10": { + "1030:10": { "preRequisiteTypes:7": [ 1 ], @@ -50683,12 +54255,14 @@ } } }, - "941:10": { + "1031:10": { "preRequisiteTypes:7": [ - 2 + 1, + 1 ], "preRequisites:11": [ - 286 + 286, + 1035 ], "properties:10": { "betterquesting:10": { @@ -50739,7 +54313,7 @@ } } }, - "942:10": { + "1032:10": { "preRequisites:11": [ 109, 339 @@ -50799,10 +54373,10 @@ } } }, - "943:10": { + "1033:10": { "preRequisites:11": [ - 102, - 339 + 339, + 729 ], "properties:10": { "betterquesting:10": { @@ -50859,7 +54433,7 @@ } } }, - "944:10": { + "1034:10": { "preRequisites:11": [ 286, 1037 @@ -50937,11 +54511,12 @@ } } }, - "945:10": { + "1035:10": { "preRequisites:11": [ - 1037, 286, - 325 + 325, + 844, + 1037 ], "properties:10": { "betterquesting:10": { @@ -51022,10 +54597,10 @@ } } }, - "946:10": { + "1036:10": { "preRequisites:11": [ - 1037, - 286 + 286, + 1037 ], "properties:10": { "betterquesting:10": { @@ -51118,14 +54693,15 @@ } } }, - "947:10": { + "1037:10": { "preRequisites:11": [ + 328, 825 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", + "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51171,15 +54747,15 @@ } } }, - "948:10": { + "1038:10": { "preRequisites:11": [ - 1039, - 196 + 196, + 1039 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", + "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51243,10 +54819,10 @@ } } }, - "949:10": { + "1039:10": { "preRequisites:11": [ - 535, - 258 + 258, + 535 ], "properties:10": { "betterquesting:10": { @@ -51297,7 +54873,7 @@ } } }, - "950:10": { + "1040:10": { "preRequisites:11": [ 259 ], @@ -51350,14 +54926,14 @@ } } }, - "951:10": { + "1041:10": { "preRequisites:11": [ 157 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", + "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51403,12 +54979,14 @@ } } }, - "952:10": { + "1042:10": { "preRequisiteTypes:7": [ - 1 + 1, + 2 ], "preRequisites:11": [ - 524 + 524, + 847 ], "properties:10": { "betterquesting:10": { @@ -51471,7 +55049,7 @@ } } }, - "953:10": { + "1043:10": { "preRequisites:11": [ 286 ], @@ -51524,7 +55102,7 @@ } } }, - "954:10": { + "1044:10": { "preRequisiteTypes:7": [ 1 ], @@ -51579,6 +55157,416 @@ "taskID:8": "bq_standard:retrieval" } } + }, + "1045:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Starting at §5EV§r, 4A Energy and Dynamo hatches are available at each tier. From §1IV§r onwards, 16A hatches will be available.\n\nNote that these hatches will not allow you to \"skip\" tiers! The maximum §erecipe tier§r a multiblock can run is determined by the tier of the hatch. If two hatches of the same tier are in the multiblock, the recipe tier will be increased to the next higher tier.\n\nInstead, these hatches can allow you to overclock recipes you can already do even more. The §eoverclock tier§r is the total EU/t input summed across all hatches.\n\nExamples:\n\n- 2x §7LV§r hatch -\u003e §bMV§r recipe tier, §bMV§r OC tier\n\n- 16A §1IV§r hatch -\u003e §1IV§r recipe tier, §cZPM§r OC tier\n\n- 2x 16A §1IV§r hatch -\u003e §dLuV§r recipe tier, 2A §cZPM§r OC tier\n\nIf in doubt, check the multiblock\u0027s GUI. It will show the max recipe tier, as well as max EU/t for overclocking.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "High Amperage Energy Hatches", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1045, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1245, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:optional_retrieval" + } + } + }, + "1046:10": { + "preRequisites:11": [ + 56 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §aAlarm§r is a simple tool which plays a loud sound when given a redstone signal. Useful for notifying you if things go wrong.\n\nRight-click the block to configure its range and sound. This tool requires §d4 EU/t§r input to work.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 10, + "OreDict:8": "", + "id:8": "gregtech:warning_sign" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Alarm", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1046, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1751, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1047:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Reservoir Hatch§r acts as an infinite water source as a fluid input hatch.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Cooking for Blockheads", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1047, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1048:10": { + "preRequisites:11": [ + 3 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Electric Prospector\u0027s Scanner§r given for free now has integration with §eJourneyMap§r.\n\nPick up surface rocks, right-click ore blocks, or use an electric prospector on ore mode to discover veins.\n\nPress the \"action key\" (default: delete) while hovering over a vein to mark it as depleted (or not depleted).\n\nDouble-click a vein to mark it as a waypoint, and again to unmark it.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:filled_map" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Visual Ores", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1048, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1049:10": { + "preRequisiteTypes:7": [ + 1, + 1 + ], + "preRequisites:11": [ + 22, + 60 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Most multiblocks now support rotation along any axis. Right-click with a Wrench on a face with a rotation ↺ symbol to rotate the controller.\n\nThe rules for building multiblocks remain the same.\n\nTake your setups to a new dimension!\n\nThe §3Cleanroom§r, §3Multiblock Miners/Drills§r, and §3Distillation Tower§r do not support being rotated.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "redstonearsenal:tool.wrench_flux", + "tag:10": { + "Energy:3": 0 + } + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Multiblock Rotation", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1049, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1050:10": { + "preRequisites:11": [ + 53 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "§oThis quest accepts LV, MV or HV Miner.§r\n\nThe §3Miner§r mines ore blocks directly below it in a certain radius. Higher tier Miners operate faster and have larger covered areas.\n\nThe LV Miner calls for an §6LV Sensor§r, which requires a bit of §6Quartzite§r.\n\nAlthough there is no Singleblock Miner at §5EV§r, you can build §3Large Miners§r at §9IV§r.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Automatic Mining", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1050, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "questbookSingleMiner", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1051:10": { + "preRequisites:11": [ + 55, + 72 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "To operate your future §bElectric Blast Furnace§r, you will need §6Hatches and Buses§r.\n\nIn order to make those, you will need §9Glue§r. Luckily, this is quite simple to make. Simply put some of your §6Sticky Resin§r into a §3Centrifuge§r!", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "forge:bucketfilled", + "tag:10": { + "Amount:3": 1000, + "FluidName:8": "glue" + } + }, + "ignoresview:1": 0, + "ismain:1": 1, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "§2Glue", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1051, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "requiredFluids:9": { + "0:10": { + "Amount:3": 1000, + "FluidName:8": "glue" + } + }, + "taskID:8": "bq_standard:fluid" + } + } + }, + "1052:10": { + "preRequisites:11": [ + 55, + 727 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9Liquid Rubber§r.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 4, + "OreDict:8": "", + "id:8": "gregtech:meta_dust_tiny" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Ore Processing with Centrifuges", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1052, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } } }, "questLines:9": { @@ -51700,354 +55688,389 @@ "y:3": 220 }, "14:10": { + "id:3": 55, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -792, + "y:3": 272 + }, + "15:10": { "id:3": 59, "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, "y:3": 232 }, - "15:10": { + "16:10": { "id:3": 60, "sizeX:3": 48, "sizeY:3": 48, "x:3": -748, "y:3": 340 }, - "16:10": { + "17:10": { "id:3": 69, "sizeX:3": 24, "sizeY:3": 24, "x:3": -648, "y:3": 352 }, - "17:10": { + "18:10": { "id:3": 72, "sizeX:3": 56, "sizeY:3": 56, "x:3": -908, "y:3": 288 }, - "18:10": { + "19:10": { "id:3": 145, "sizeX:3": 30, "sizeY:3": 30, "x:3": -895, "y:3": 181 }, - "19:10": { + "20:10": { "id:3": 146, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 128 }, - "20:10": { + "21:10": { "id:3": 147, "sizeX:3": 24, "sizeY:3": 24, "x:3": -840, "y:3": 232 }, - "21:10": { + "22:10": { "id:3": 215, "sizeX:3": 24, "sizeY:3": 24, "x:3": -840, "y:3": 80 }, - "22:10": { + "23:10": { "id:3": 228, "sizeX:3": 24, "sizeY:3": 24, "x:3": -560, "y:3": 80 }, - "23:10": { + "24:10": { "id:3": 231, "sizeX:3": 24, "sizeY:3": 24, "x:3": -700, "y:3": 400 }, - "24:10": { + "25:10": { "id:3": 259, "sizeX:3": 48, "sizeY:3": 48, "x:3": -660, "y:3": 388 }, - "25:10": { + "26:10": { "id:3": 260, "sizeX:3": 24, "sizeY:3": 24, "x:3": -648, "y:3": 232 }, - "26:10": { + "27:10": { "id:3": 270, "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, - "y:3": 128 + "y:3": 80 }, - "27:10": { + "28:10": { "id:3": 272, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 160 }, - "28:10": { + "29:10": { "id:3": 273, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 400 }, - "29:10": { + "30:10": { "id:3": 282, "sizeX:3": 48, "sizeY:3": 48, "x:3": -480, "y:3": 116 }, - "30:10": { + "31:10": { "id:3": 296, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 128 }, - "31:10": { + "32:10": { "id:3": 352, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 80 }, - "32:10": { + "33:10": { "id:3": 402, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 354 }, - "33:10": { + "34:10": { "id:3": 403, "sizeX:3": 36, "sizeY:3": 36, "x:3": -492, "y:3": 354 }, - "34:10": { + "35:10": { "id:3": 413, "sizeX:3": 24, "sizeY:3": 24, "x:3": -892, "y:3": 128 }, - "35:10": { + "36:10": { "id:3": 489, "sizeX:3": 24, "sizeY:3": 24, "x:3": -984, "y:3": 184 }, - "36:10": { + "37:10": { "id:3": 490, "sizeX:3": 24, "sizeY:3": 24, "x:3": -560, "y:3": 128 }, - "37:10": { + "38:10": { "id:3": 497, "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, "y:3": 232 }, - "38:10": { + "39:10": { "id:3": 498, "sizeX:3": 24, "sizeY:3": 24, "x:3": -840, "y:3": 400 }, - "39:10": { + "40:10": { "id:3": 516, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 304 }, - "40:10": { + "41:10": { "id:3": 517, "sizeX:3": 24, "sizeY:3": 24, "x:3": -892, "y:3": 232 }, - "41:10": { + "42:10": { "id:3": 528, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 196 }, - "42:10": { + "43:10": { "id:3": 544, "sizeX:3": 24, "sizeY:3": 24, "x:3": -696, "y:3": 268 }, - "43:10": { + "44:10": { "id:3": 545, "sizeX:3": 24, "sizeY:3": 24, "x:3": -648, "y:3": 304 }, - "44:10": { + "45:10": { "id:3": 548, "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, "y:3": 80 }, - "45:10": { + "46:10": { "id:3": 553, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 80 }, - "46:10": { + "47:10": { "id:3": 554, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 48 }, - "47:10": { + "48:10": { "id:3": 559, "sizeX:3": 24, "sizeY:3": 24, "x:3": -700, "y:3": 436 }, - "48:10": { + "49:10": { "id:3": 684, "sizeX:3": 24, "sizeY:3": 24, "x:3": -504, "y:3": 80 }, - "49:10": { + "50:10": { "id:3": 774, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, - "y:3": 184 + "x:3": -940, + "y:3": 128 }, - "50:10": { + "51:10": { "id:3": 779, "sizeX:3": 36, "sizeY:3": 36, "x:3": -588, "y:3": 402 }, - "51:10": { + "52:10": { "id:3": 787, "sizeX:3": 24, "sizeY:3": 24, "x:3": -560, "y:3": 160 }, - "52:10": { + "53:10": { "id:3": 788, "sizeX:3": 36, "sizeY:3": 36, "x:3": -540, "y:3": 402 }, - "53:10": { + "54:10": { "id:3": 789, "sizeX:3": 36, "sizeY:3": 36, "x:3": -540, "y:3": 354 }, - "54:10": { + "55:10": { "id:3": 805, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 232 }, - "55:10": { + "56:10": { "id:3": 814, "sizeX:3": 24, "sizeY:3": 24, "x:3": -692, "y:3": 80 }, - "56:10": { + "57:10": { "id:3": 815, "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, "y:3": 184 }, - "57:10": { + "58:10": { "id:3": 819, "sizeX:3": 36, "sizeY:3": 36, "x:3": -492, "y:3": 402 }, - "58:10": { + "59:10": { "id:3": 890, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 306 }, - "59:10": { + "60:10": { "id:3": 893, "sizeX:3": 36, "sizeY:3": 36, "x:3": -492, "y:3": 306 }, - "60:10": { + "61:10": { "id:3": 903, "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, "y:3": 304 }, - "61:10": { + "62:10": { "id:3": 919, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 258 }, - "62:10": { + "63:10": { "id:3": 926, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 400 }, - "63:10": { + "64:10": { "id:3": 933, "sizeX:3": 32, "sizeY:3": 32, "x:3": -840, "y:3": 272 + }, + "65:10": { + "id:3": 1046, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -588, + "y:3": 354 + }, + "66:10": { + "id:3": 1049, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -492, + "y:3": 258 + }, + "67:10": { + "id:3": 1050, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -840, + "y:3": 184 + }, + "68:10": { + "id:3": 1051, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -792, + "y:3": 352 } } }, @@ -52162,711 +56185,711 @@ "y:3": -232 }, "13:10": { - "id:3": 55, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -48, - "y:3": -360 - }, - "14:10": { "id:3": 57, "sizeX:3": 24, "sizeY:3": 24, "x:3": 636, "y:3": -228 }, - "15:10": { + "14:10": { "id:3": 67, "sizeX:3": 24, "sizeY:3": 24, "x:3": 636, "y:3": -416 }, - "16:10": { + "15:10": { "id:3": 70, "sizeX:3": 24, "sizeY:3": 24, "x:3": -48, "y:3": -404 }, - "17:10": { + "16:10": { "id:3": 71, "sizeX:3": 32, "sizeY:3": 32, "x:3": 80, "y:3": -232 }, - "18:10": { + "17:10": { "id:3": 72, "sizeX:3": 32, "sizeY:3": 32, "x:3": -48, "y:3": -148 }, - "19:10": { + "18:10": { "id:3": 74, "sizeX:3": 24, "sizeY:3": 24, "x:3": 116, "y:3": -184 }, - "20:10": { + "19:10": { "id:3": 75, "sizeX:3": 24, "sizeY:3": 24, "x:3": 48, "y:3": -228 }, - "21:10": { + "20:10": { "id:3": 76, "sizeX:3": 32, "sizeY:3": 32, "x:3": 80, "y:3": -64 }, - "22:10": { + "21:10": { "id:3": 78, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -316 }, - "23:10": { + "22:10": { "id:3": 79, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -276 }, - "24:10": { + "23:10": { "id:3": 80, "sizeX:3": 24, "sizeY:3": 24, "x:3": 24, "y:3": -316 }, - "25:10": { + "24:10": { "id:3": 81, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -316 }, - "26:10": { + "25:10": { "id:3": 82, "sizeX:3": 24, "sizeY:3": 24, "x:3": 16, "y:3": -60 }, - "27:10": { + "26:10": { "id:3": 83, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -448 }, - "28:10": { + "27:10": { "id:3": 84, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -316 }, - "29:10": { + "28:10": { "id:3": 86, "sizeX:3": 48, "sizeY:3": 48, "x:3": 312, "y:3": -328 }, - "30:10": { + "29:10": { "id:3": 87, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -484 }, - "31:10": { + "30:10": { "id:3": 88, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -388 }, - "32:10": { + "31:10": { "id:3": 89, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -520 }, - "33:10": { + "32:10": { "id:3": 90, "sizeX:3": 48, "sizeY:3": 48, "x:3": 524, "y:3": -532 }, - "34:10": { + "33:10": { "id:3": 91, "sizeX:3": 32, "sizeY:3": 32, "x:3": 132, "y:3": -232 }, - "35:10": { + "34:10": { "id:3": 92, "sizeX:3": 24, "sizeY:3": 24, "x:3": 116, "y:3": -104 }, - "36:10": { + "35:10": { "id:3": 93, - "sizeX:3": 48, - "sizeY:3": 48, - "x:3": 392, - "y:3": -240 + "sizeX:3": 40, + "sizeY:3": 40, + "x:3": 440, + "y:3": -236 }, - "37:10": { + "36:10": { "id:3": 94, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -228 }, - "38:10": { + "37:10": { "id:3": 95, "sizeX:3": 40, "sizeY:3": 40, "x:3": 276, "y:3": -236 }, - "39:10": { + "38:10": { "id:3": 96, "sizeX:3": 24, "sizeY:3": 24, "x:3": 492, "y:3": -228 }, - "40:10": { + "39:10": { "id:3": 98, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 356, + "x:3": 360, "y:3": -232 }, - "41:10": { + "40:10": { "id:3": 104, "sizeX:3": 40, "sizeY:3": 40, - "x:3": 440, - "y:3": -292 + "x:3": 484, + "y:3": -188 }, - "42:10": { + "41:10": { "id:3": 107, "sizeX:3": 24, "sizeY:3": 24, "x:3": 156, "y:3": -184 }, - "43:10": { + "42:10": { "id:3": 112, "sizeX:3": 24, "sizeY:3": 24, "x:3": 156, "y:3": -144 }, - "44:10": { + "43:10": { "id:3": 126, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 448, - "y:3": -228 + "x:3": 364, + "y:3": -276 }, - "45:10": { + "44:10": { "id:3": 129, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -448 }, - "46:10": { + "45:10": { "id:3": 130, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -556 }, - "47:10": { + "46:10": { "id:3": 131, "sizeX:3": 24, "sizeY:3": 24, "x:3": 536, "y:3": -228 }, - "48:10": { + "47:10": { "id:3": 132, "sizeX:3": 24, "sizeY:3": 24, "x:3": 696, "y:3": -372 }, - "49:10": { + "48:10": { "id:3": 133, "sizeX:3": 32, "sizeY:3": 32, "x:3": 532, "y:3": -452 }, - "50:10": { + "49:10": { "id:3": 134, "sizeX:3": 24, "sizeY:3": 24, "x:3": 536, "y:3": -284 }, - "51:10": { + "50:10": { "id:3": 135, "sizeX:3": 40, "sizeY:3": 40, "x:3": 528, "y:3": -380 }, - "52:10": { + "51:10": { "id:3": 154, "sizeX:3": 40, "sizeY:3": 40, "x:3": 736, "y:3": -380 }, - "53:10": { + "52:10": { "id:3": 156, "sizeX:3": 24, "sizeY:3": 24, "x:3": 136, "y:3": -316 }, - "54:10": { + "53:10": { "id:3": 157, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -316 }, - "55:10": { + "54:10": { "id:3": 164, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -228 }, - "56:10": { + "55:10": { "id:3": 165, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -184 }, - "57:10": { + "56:10": { "id:3": 168, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -276 }, - "58:10": { + "57:10": { "id:3": 184, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -184 }, - "59:10": { + "58:10": { "id:3": 187, "sizeX:3": 32, "sizeY:3": 32, "x:3": -88, "y:3": -408 }, - "60:10": { + "59:10": { "id:3": 203, "sizeX:3": 24, "sizeY:3": 24, "x:3": 576, "y:3": -372 }, - "61:10": { + "60:10": { "id:3": 213, "sizeX:3": 24, "sizeY:3": 24, "x:3": 620, "y:3": -336 }, - "62:10": { + "61:10": { "id:3": 227, "sizeX:3": 24, "sizeY:3": 24, "x:3": 24, "y:3": -388 }, - "63:10": { + "62:10": { "id:3": 233, "sizeX:3": 32, "sizeY:3": 32, "x:3": 112, "y:3": -148 }, - "64:10": { + "63:10": { "id:3": 236, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 324, - "y:3": -228 + "x:3": 284, + "y:3": -484 }, - "65:10": { + "64:10": { "id:3": 237, "sizeX:3": 24, "sizeY:3": 24, "x:3": 156, "y:3": -104 }, - "66:10": { + "65:10": { "id:3": 319, "sizeX:3": 32, "sizeY:3": 32, "x:3": 176, "y:3": -392 }, - "67:10": { + "66:10": { "id:3": 338, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 404, - "y:3": -284 + "x:3": 476, + "y:3": -276 }, - "68:10": { + "67:10": { "id:3": 398, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 364, - "y:3": -488 + "x:3": 360, + "y:3": -560 }, - "69:10": { + "68:10": { "id:3": 400, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, - "y:3": -484 + "x:3": 284, + "y:3": -556 }, - "70:10": { + "69:10": { "id:3": 502, "sizeX:3": 24, "sizeY:3": 24, "x:3": 492, "y:3": -448 }, - "71:10": { + "70:10": { "id:3": 504, "sizeX:3": 24, "sizeY:3": 24, "x:3": 284, "y:3": -104 }, - "72:10": { + "71:10": { "id:3": 505, "sizeX:3": 24, "sizeY:3": 24, "x:3": 284, "y:3": -144 }, - "73:10": { + "72:10": { "id:3": 507, "sizeX:3": 24, "sizeY:3": 24, "x:3": 536, "y:3": -180 }, - "74:10": { + "73:10": { "id:3": 509, "sizeX:3": 32, "sizeY:3": 32, "x:3": -52, "y:3": -64 }, - "75:10": { + "74:10": { "id:3": 540, "sizeX:3": 24, "sizeY:3": 24, "x:3": 84, "y:3": -4 }, - "76:10": { + "75:10": { "id:3": 541, "sizeX:3": 32, "sizeY:3": 32, "x:3": 220, "y:3": -392 }, - "77:10": { + "76:10": { "id:3": 546, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -144 }, - "78:10": { + "77:10": { "id:3": 549, "sizeX:3": 24, "sizeY:3": 24, "x:3": 172, "y:3": -276 }, - "79:10": { + "78:10": { "id:3": 609, "sizeX:3": 32, "sizeY:3": 32, "x:3": 132, "y:3": -392 }, - "80:10": { + "79:10": { "id:3": 727, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -360 }, - "81:10": { + "80:10": { "id:3": 728, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -420 }, - "82:10": { + "81:10": { "id:3": 730, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -388 }, - "83:10": { + "82:10": { "id:3": 731, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -356 }, - "84:10": { + "83:10": { "id:3": 747, "sizeX:3": 24, "sizeY:3": 24, "x:3": 16, "y:3": -228 }, - "85:10": { + "84:10": { "id:3": 790, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -124 }, - "86:10": { + "85:10": { "id:3": 801, "sizeX:3": 24, "sizeY:3": 24, "x:3": 744, "y:3": -336 }, - "87:10": { + "86:10": { "id:3": 810, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -276 }, - "88:10": { + "87:10": { "id:3": 812, "sizeX:3": 0, "sizeY:3": 0, "x:3": 296, "y:3": -216 }, - "89:10": { + "88:10": { "id:3": 816, "sizeX:3": 48, "sizeY:3": 48, "x:3": 312, "y:3": -72 }, - "90:10": { + "89:10": { "id:3": 818, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 276, - "y:3": -20 + "x:3": 364, + "y:3": -104 }, - "91:10": { + "90:10": { "id:3": 820, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -164 }, - "92:10": { + "91:10": { "id:3": 821, "sizeX:3": 24, "sizeY:3": 24, "x:3": 16, "y:3": -4 }, - "93:10": { + "92:10": { "id:3": 822, "sizeX:3": 24, "sizeY:3": 24, "x:3": 48, "y:3": -60 }, - "94:10": { + "93:10": { "id:3": 823, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -404 }, - "95:10": { + "94:10": { "id:3": 824, "sizeX:3": 24, "sizeY:3": 24, "x:3": 576, "y:3": -228 }, - "96:10": { + "95:10": { "id:3": 830, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 444, - "y:3": -184 + "x:3": 404, + "y:3": -392 }, - "97:10": { + "96:10": { "id:3": 831, "sizeX:3": 24, "sizeY:3": 24, "x:3": 448, - "y:3": -136 + "y:3": -388 }, - "98:10": { + "97:10": { "id:3": 832, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 492, - "y:3": -136 + "x:3": 364, + "y:3": -388 }, - "99:10": { + "98:10": { "id:3": 833, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 404, - "y:3": -136 + "x:3": 448, + "y:3": -356 }, - "100:10": { + "99:10": { "id:3": 834, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 492, + "x:3": 448, "y:3": -180 }, - "101:10": { + "100:10": { "id:3": 835, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 360, - "y:3": -268 + "x:3": 448, + "y:3": -276 }, - "102:10": { + "101:10": { "id:3": 836, "sizeX:3": 24, "sizeY:3": 24, "x:3": 100, "y:3": -276 }, - "103:10": { + "102:10": { "id:3": 837, "sizeX:3": 24, "sizeY:3": 24, "x:3": 136, "y:3": -276 }, - "104:10": { + "103:10": { "id:3": 886, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -520 }, - "105:10": { + "104:10": { "id:3": 887, "sizeX:3": 24, "sizeY:3": 24, "x:3": 284, "y:3": -184 }, - "106:10": { + "105:10": { "id:3": 894, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -448 }, - "107:10": { + "106:10": { "id:3": 895, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -388 }, - "108:10": { + "107:10": { "id:3": 896, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 360, - "y:3": -180 + "x:3": 408, + "y:3": -196 }, - "109:10": { + "108:10": { "id:3": 897, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 404, - "y:3": -180 + "x:3": 408, + "y:3": -228 }, - "110:10": { + "109:10": { "id:3": 929, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 272, - "y:3": 20 + "x:3": 360, + "y:3": -168 }, - "111:10": { + "110:10": { "id:3": 936, "sizeX:3": 24, "sizeY:3": 24, "x:3": 696, "y:3": -420 }, - "112:10": { + "111:10": { "id:3": 1040, "sizeX:3": 24, "sizeY:3": 24, "x:3": 136, "y:3": -356 }, - "113:10": { + "112:10": { "id:3": 1041, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -276 + }, + "113:10": { + "id:3": 1052, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -48, + "y:3": -360 } } }, @@ -52915,14 +56938,14 @@ "sizeX:3": 48, "sizeY:3": 48, "x:3": -564, - "y:3": 216 + "y:3": 124 }, "4:10": { "id:3": 68, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 312 + "x:3": -424, + "y:3": 152 }, "5:10": { "id:3": 132, @@ -52936,7 +56959,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -228, - "y:3": 132 + "y:3": 136 }, "7:10": { "id:3": 144, @@ -52947,16 +56970,16 @@ }, "8:10": { "id:3": 148, - "sizeX:3": 36, - "sizeY:3": 36, - "x:3": -762, - "y:3": 102 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -724, + "y:3": 104 }, "9:10": { "id:3": 149, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -720, "y:3": 72 }, "10:10": { @@ -52970,14 +56993,14 @@ "id:3": 151, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -720, "y:3": -48 }, "12:10": { "id:3": 152, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -720, "y:3": 0 }, "13:10": { @@ -53005,14 +57028,14 @@ "id:3": 158, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -512, + "x:3": -516, "y:3": 72 }, "17:10": { "id:3": 159, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, + "x:3": -468, "y:3": 72 }, "18:10": { @@ -53117,22 +57140,22 @@ "id:3": 176, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -306, - "y:3": -48 + "x:3": -360, + "y:3": 52 }, "33:10": { "id:3": 177, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -258, - "y:3": -48 + "x:3": -360, + "y:3": 108 }, "34:10": { "id:3": 178, "sizeX:3": 24, "sizeY:3": 24, "x:3": -204, - "y:3": 24 + "y:3": 108 }, "35:10": { "id:3": 179, @@ -53171,24 +57194,24 @@ }, "40:10": { "id:3": 185, - "sizeX:3": 48, - "sizeY:3": 48, - "x:3": -420, - "y:3": 96 + "sizeX:3": 40, + "sizeY:3": 40, + "x:3": -608, + "y:3": 100 }, "41:10": { "id:3": 186, "sizeX:3": 24, "sizeY:3": 24, "x:3": -684, - "y:3": 276 + "y:3": 280 }, "42:10": { "id:3": 188, "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, - "y:3": 108 + "y:3": 204 }, "43:10": { "id:3": 190, @@ -53215,15 +57238,15 @@ "id:3": 197, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 204 + "x:3": -360, + "y:3": 252 }, "47:10": { "id:3": 198, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -420, - "y:3": 240 + "x:3": -424, + "y:3": 252 }, "48:10": { "id:3": 199, @@ -53236,8 +57259,8 @@ "id:3": 201, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 144 + "x:3": -468, + "y:3": 204 }, "50:10": { "id:3": 234, @@ -53265,42 +57288,42 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -552, - "y:3": 180 + "y:3": 176 }, "54:10": { "id:3": 248, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -774, - "y:3": 246 + "x:3": -792, + "y:3": 244 }, "55:10": { "id:3": 249, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, - "y:3": 276 + "x:3": -828, + "y:3": 272 }, "56:10": { "id:3": 250, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -810, - "y:3": 246 + "x:3": -828, + "y:3": 244 }, "57:10": { "id:3": 255, "sizeX:3": 24, "sizeY:3": 24, "x:3": -552, - "y:3": 144 + "y:3": 204 }, "58:10": { "id:3": 261, "sizeX:3": 24, "sizeY:3": 24, "x:3": -288, - "y:3": 276 + "y:3": 288 }, "59:10": { "id:3": 267, @@ -53418,7 +57441,7 @@ "id:3": 311, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -288, + "x:3": -324, "y:3": 204 }, "76:10": { @@ -53426,13 +57449,13 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 240 + "y:3": 252 }, "77:10": { "id:3": 318, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -330, + "x:3": -424, "y:3": 108 }, "78:10": { @@ -53440,35 +57463,35 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -156, - "y:3": 132 + "y:3": 136 }, "79:10": { "id:3": 339, "sizeX:3": 24, "sizeY:3": 24, "x:3": -720, - "y:3": 156 + "y:3": 344 }, "80:10": { "id:3": 340, "sizeX:3": 24, "sizeY:3": 24, "x:3": -756, - "y:3": 156 + "y:3": 308 }, "81:10": { "id:3": 341, - "sizeX:3": 20, - "sizeY:3": 20, - "x:3": -388, - "y:3": 260 + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -456, + "y:3": 252 }, "82:10": { "id:3": 344, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -522, - "y:3": 168 + "x:3": -528, + "y:3": 232 }, "83:10": { "id:3": 347, @@ -53510,28 +57533,28 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, - "y:3": 240 + "y:3": 280 }, "89:10": { "id:3": 512, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 240 + "x:3": -360, + "y:3": 152 }, "90:10": { "id:3": 526, "sizeX:3": 48, "sizeY:3": 48, "x:3": -648, - "y:3": 144 + "y:3": 268 }, "91:10": { "id:3": 527, "sizeX:3": 24, "sizeY:3": 24, "x:3": -288, - "y:3": 240 + "y:3": 252 }, "92:10": { "id:3": 532, @@ -53544,22 +57567,22 @@ "id:3": 542, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 240 + "x:3": -360, + "y:3": 184 }, "94:10": { "id:3": 549, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -528, - "y:3": 414 + "x:3": -680, + "y:3": 420 }, "95:10": { "id:3": 551, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -504, - "y:3": 198 + "x:3": -528, + "y:3": 296 }, "96:10": { "id:3": 555, @@ -53572,8 +57595,8 @@ "id:3": 580, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -468, - "y:3": 414 + "x:3": -620, + "y:3": 420 }, "98:10": { "id:3": 611, @@ -53663,22 +57686,22 @@ "id:3": 690, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -420, - "y:3": 276 + "x:3": -424, + "y:3": 344 }, "111:10": { "id:3": 693, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 276 + "x:3": -392, + "y:3": 184 }, "112:10": { "id:3": 694, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -528, - "y:3": 276 + "x:3": -392, + "y:3": 152 }, "113:10": { "id:3": 732, @@ -53692,7 +57715,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -252, - "y:3": 240 + "y:3": 252 }, "115:10": { "id:3": 746, @@ -53726,15 +57749,15 @@ "id:3": 783, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -348, - "y:3": 414 + "x:3": -500, + "y:3": 420 }, "120:10": { "id:3": 785, - "sizeX:3": 22, - "sizeY:3": 22, - "x:3": -390, - "y:3": 222 + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -424, + "y:3": 224 }, "121:10": { "id:3": 798, @@ -53748,7 +57771,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -252, - "y:3": 276 + "y:3": 288 }, "123:10": { "id:3": 800, @@ -53787,17 +57810,17 @@ }, "128:10": { "id:3": 827, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -258, - "y:3": -79 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -328, + "y:3": 132 }, "129:10": { "id:3": 828, "sizeX:3": 32, "sizeY:3": 32, "x:3": -364, - "y:3": 236 + "y:3": 284 }, "130:10": { "id:3": 835, @@ -53811,35 +57834,35 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, - "y:3": 156 + "y:3": 320 }, "132:10": { "id:3": 841, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 312 + "y:3": 344 }, "133:10": { "id:3": 849, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -360, - "y:3": 276 + "x:3": -392, + "y:3": 344 }, "134:10": { "id:3": 850, "sizeX:3": 32, "sizeY:3": 32, "x:3": -364, - "y:3": 308 + "y:3": 340 }, "135:10": { "id:3": 851, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 276 + "y:3": 288 }, "136:10": { "id:3": 852, @@ -53852,22 +57875,22 @@ "id:3": 857, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -720, - "y:3": 342 + "x:3": -648, + "y:3": 344 }, "138:10": { "id:3": 858, - "sizeX:3": 36, - "sizeY:3": 36, - "x:3": -558, - "y:3": 336 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -556, + "y:3": 340 }, "139:10": { "id:3": 859, - "sizeX:3": 72, - "sizeY:3": 72, - "x:3": -444, - "y:3": 318 + "sizeX:3": 48, + "sizeY:3": 48, + "x:3": -496, + "y:3": 332 }, "140:10": { "id:3": 888, @@ -53880,8 +57903,8 @@ "id:3": 892, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -408, - "y:3": 414 + "x:3": -560, + "y:3": 420 }, "142:10": { "id:3": 899, @@ -53901,8 +57924,8 @@ "id:3": 912, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -486, - "y:3": 168 + "x:3": -528, + "y:3": 264 }, "145:10": { "id:3": 921, @@ -53915,8 +57938,36 @@ "id:3": 934, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 276 + "x:3": -424, + "y:3": 184 + }, + "147:10": { + "id:3": 1032, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -684, + "y:3": 380 + }, + "148:10": { + "id:3": 1033, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -720, + "y:3": 380 + }, + "149:10": { + "id:3": 1045, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -756, + "y:3": 380 + }, + "150:10": { + "id:3": 1047, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -756, + "y:3": 344 } } }, @@ -55399,14 +59450,14 @@ "id:3": 840, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -168, + "x:3": -172, "y:3": 0 }, "106:10": { "id:3": 841, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -168, + "x:3": -172, "y:3": -48 }, "107:10": { @@ -55442,7 +59493,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -60, - "y:3": 264 + "y:3": 220 }, "112:10": { "id:3": 847, @@ -56997,6 +61048,13 @@ "sizeY:3": 24, "x:3": 72, "y:3": 192 + }, + "65:10": { + "id:3": 1048, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": 36, + "y:3": -4 } } }, @@ -57665,7 +61723,7 @@ "betterquesting:10": { "bg_image:8": "", "bg_size:3": 256, - "desc:8": "Convert between matter and energy with §bApplied Energistics§r§r.\n\nAutomate ALL the things! o/", + "desc:8": "Convert between matter and energy with §bApplied Energistics§r.\n\nAutomate ALL the things! o/", "icon:10": { "Count:3": 1, "Damage:2": 2, @@ -57682,7 +61740,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -100, - "y:3": 366 + "y:3": 368 }, "1:10": { "id:3": 1, @@ -57714,10 +61772,10 @@ }, "5:10": { "id:3": 64, - "sizeX:3": 36, - "sizeY:3": 36, + "sizeX:3": 32, + "sizeY:3": 32, "x:3": 12, - "y:3": 360 + "y:3": 364 }, "6:10": { "id:3": 73, @@ -57829,49 +61887,49 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 144, - "y:3": 312 + "y:3": 368 }, "22:10": { "id:3": 119, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 96, - "y:3": 312 + "x:3": 186, + "y:3": 368 }, "23:10": { "id:3": 120, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 48, - "y:3": 312 + "x:3": 228, + "y:3": 368 }, "24:10": { "id:3": 122, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 228, - "y:3": 516 + "x:3": 260, + "y:3": 480 }, "25:10": { "id:3": 123, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 228, - "y:3": 552 + "x:3": 260, + "y:3": 516 }, "26:10": { "id:3": 124, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 228, - "y:3": 588 + "x:3": 260, + "y:3": 552 }, "27:10": { "id:3": 132, "sizeX:3": 24, "sizeY:3": 24, "x:3": 228, - "y:3": 312 + "y:3": 678 }, "28:10": { "id:3": 140, @@ -57885,7 +61943,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -48, - "y:3": 366 + "y:3": 368 }, "30:10": { "id:3": 237, @@ -57913,14 +61971,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 144, - "y:3": 726 + "y:3": 728 }, "34:10": { "id:3": 406, "sizeX:3": 24, "sizeY:3": 24, "x:3": 60, - "y:3": 726 + "y:3": 728 }, "35:10": { "id:3": 408, @@ -57968,8 +62026,8 @@ "id:3": 811, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -48, - "y:3": 678 + "x:3": 4, + "y:3": 652 }, "42:10": { "id:3": 829, @@ -57997,14 +62055,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -48, - "y:3": 312 + "y:3": 678 }, "46:10": { "id:3": 918, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": 0, - "y:3": 312 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -52, + "y:3": 724 }, "47:10": { "id:3": 924, @@ -58032,7 +62090,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 186, - "y:3": 726 + "y:3": 728 }, "51:10": { "id:3": 1032, diff --git a/overrides/config-overrides/normal/betterquesting/DefaultQuests.json b/overrides/config-overrides/normal/betterquesting/DefaultQuests.json index fb0f630..1489328 100644 --- a/overrides/config-overrides/normal/betterquesting/DefaultQuests.json +++ b/overrides/config-overrides/normal/betterquesting/DefaultQuests.json @@ -1,5 +1,5 @@ { - "build:8": "4.2.1", + "build:8": "4.2.2", "format:8": "2.0.0", "questDatabase:9": { "0:10": { @@ -9,7 +9,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.\n\n", + "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -200,7 +200,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.\n\n", + "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -377,7 +377,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§c§rOres in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, the quest book will later guide you towards making §2an HV Battery§r to charge §aHV tools §rin your inventory.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", + "desc:8": "Ores in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, the quest book will later guide you towards making §2an HV Battery§r to charge §aHV tools §rin your inventory.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -760,7 +760,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "In most expert packs, you want to try to process as little ore as possible before you get access to ore doubling. It\u0027s a habit most of us pick up.\n\n§eYou shouldn\u0027t feel any pressure to do that in Nomifactory, though§r. Ore veins are massive, and mining is extremely fast with §aMining Hammers§r. What\u0027s more, even once you get access to §3Macerators§r, they initially process ore slowly and require power to operate.\n\nObvious exceptions would be rare materials or anything you buy with §dNomicoins §rbecause you can\u0027t find it. Those are worth doubling, if possible.\n\nBut at least for now, you shouldn\u0027t feel any guilt about smelting the more common ores without doubling them! §eOre doubling can be safely ignored until you have the §2Steam Grinder§r§e, or Medium Voltage machines or even later.§r", + "desc:8": "In most expert packs, you want to try to process as little ore as possible before you get access to ore doubling. It\u0027s a habit most of us pick up.\n\n§eYou shouldn\u0027t feel any pressure to do that in Nomifactory, though§r. Ore veins are massive, and mining is extremely fast with §aMining Hammers§r. What\u0027s more, even once you get access to §3Macerators§r, they initially process ore slowly and require power to operate.\n\nObvious exceptions would be rare materials or anything you buy with §dNomicoins §rbecause you can\u0027t find it. Those are worth doubling, if possible.\n\nBut at least for now, you shouldn\u0027t feel any guilt about smelting the more common ores without doubling them! §eOre doubling can be safely ignored until you have the §2Steam Grinder§e, or Medium Voltage machines or even later.§r", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1158,7 +1158,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", + "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1694,7 +1694,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You already have §6Steel§r, but it can be made much faster in the §3Alloy Smelter§r, at the cost of EU.\n\nYou might want to save your §6Coal Dust§r for circuits and use §6Charcoal Dust§r instead. Later, you can also process either of these dusts, §6Coal Coke Dust§r, §2or Diamond Dust§r into §6Carbon Dust§r, which can be used for Steel and other useful things.", + "desc:8": "You already have §6Steel§r, but it can be made much faster in the §3Alloy Smelter§r, at the cost of EU. Once you build the §3Electric Blast Furnace§r, you may opt to make Steel there with Oxygen instead.\n\nYou might want to save your §6Coal Dust§r for circuits and use §6Charcoal Dust§r instead. Later, you can also process either of these dusts, §6Coal Coke Dust§r, §2or Diamond Dust§r into §6Carbon Dust§r, which can be used for Steel and other useful things.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1761,7 +1761,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nRemember that Hatches and Buses can be replaced by Hatches and Buses of any tier, although the Input Bus must be at least LV, as there are 2 inputs, and that you can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.\n", + "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nRemember that Hatches and Buses can be replaced by Hatches and Buses of any tier, although the Input Bus must be at least LV, as there are 2 inputs, and that you can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -2897,7 +2897,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts any §2§oLV Energy Converter§r§o.\n\n§rThe §3Steam Dynamos§r§r§r you have made are generating §aRF power§r, but §bGregTech§r machines require §aEU power§r. With your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §3§2Energy Converter§r.\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", + "desc:8": "§oNote: this quest accepts any §oLV Energy Converter§o.\n\n§rThe §3Steam Dynamos§r you have made are capable of generating §aRF power§r, but §bGregTech§r machines require §aEU power§r. With your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §2Energy Converter§r.\n\n§cNote that the two are incompatible!§r\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3597,7 +3597,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §2distlling Liquid Air§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §2distlling Liquid Air§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4037,7 +4037,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9liquid Rubber§r.\n\n", + "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9liquid Rubber§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4496,7 +4496,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§6§2Perfect Gems§r can be obtained from such missions.", + "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§2Perfect Gems§r can be obtained from such missions.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4625,13 +4625,13 @@ }, "63:10": { "preRequisites:11": [ - 62, - 1 + 1, + 62 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.\n\n", + "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4775,18 +4775,18 @@ "65:10": { "preRequisiteTypes:7": [ 0, - 0, - 2 + 2, + 0 ], "preRequisites:11": [ 246, - 386, - 328 + 328, + 386 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", + "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore\n§2* Cobaltite Ore\n* Laurite Ore\n* Cuprorhodsite Ore§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5238,7 +5238,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.\n", + "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5718,7 +5718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of small dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", + "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5799,7 +5799,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \n\nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.\n", + "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \n\nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6162,7 +6162,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -6196,8 +6196,20 @@ "Damage:2": 568, "OreDict:8": "", "id:8": "gregtech:meta_item_1" - }, - "1:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 593, "OreDict:8": "", @@ -6389,7 +6401,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §a§3§2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n", + "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n§rAlternatively, you can use §9Sulfuric Acid§r to create §9Chemical Dyes§r of the required color, and use them to make dyed §6Glass Lenses§r. Chemical Dyes can be infinitely looped.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6452,8 +6464,8 @@ "89:10": { "preRequisites:11": [ 87, - 236, - 130 + 130, + 236 ], "properties:10": { "betterquesting:10": { @@ -6723,8 +6735,8 @@ }, "93:10": { "preRequisites:11": [ - 98, - 96 + 96, + 98 ], "properties:10": { "betterquesting:10": { @@ -6796,7 +6808,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Sulfuric Acid is mainly produced in a 3-step process:\n- Sulfur added to Oxygen to produce Sulfur Dioxide. SO₂ also can come from treating certain Sulfur-containing Dusts with Oxygen in the EBF, or by processing Nether Air.\n- Sulfur Dioxide added to more Oxygen, to produce Sulfur Trioxide.\n- Sulfur Trioxide added to Water, to produce Sulfuric Acid.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at HV.\n\n§rYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things, but is also easily available via §bDeep Mob Evolution§r\u0027s §aBlaze Model§r.", + "desc:8": "§9Sulfuric Acid§r is mainly produced in a 3-step process:\n\n- §6Sulfur§r added to §9Oxygen§r to produce §eSulfur Dioxide§r. SO₂ also can come from treating certain Sulfur-containing Dusts with Oxygen in the EBF, or by processing §eNether Air§r.\n\n- Sulfur Dioxide added to more Oxygen, to produce §eSulfur Trioxide§r.\n\n- Sulfur Trioxide added to §9Water§r, to produce §9Sulfuric Acid§r.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at §6HV§r.\n\n§rYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things, but is also easily available via §bDeep Mob Evolution§r\u0027s §aBlaze Model§r.\n\nIf you are using §dGregTech Pipes§r, check that your pipe material of choice can handle acids.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6858,13 +6870,13 @@ }, "95:10": { "preRequisites:11": [ - 973, - 184 + 184, + 973 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Ethylene§r is a hydrocarbon obtained from §dOil Processing§r, or by dehydrating §9Ethanol§r with §9Sulfuric Acid§r in a §3Chemical Reactor§r. Choose a method that works for you:\n\n- The §9Ethanol§r route allows you to use your existing §6Sugarcane§r farm to produce §9Ethylene§r. However, the recipes require §bMedium Voltage§r machines to run.\n\n- The §dOil Processing§r route requires §2only LV machines§r, but you will have to source §9Oil§r, or its variants, from somewhere. §2Severely Steam-Cracked Light Fuel§r is most efficient with §9Raw Oil, Oil and Heavy Oil§r. §2Severely Steam-Cracked Naphtha§r is more efficient when you are using §9Light Oil§r.\n\nIt is an extremely important chemical in the production of plastics, as you\u0027ll need §9Ethylene§r in your production of §9Polyethylene (PE)§r, §9Polyvinyl Chloride (PVC)§r, and can be used in the production of §9Styrene-Butadiene Rubber (SBR)§r, the best form of rubber.", + "desc:8": "§9Ethylene§r is a hydrocarbon obtained from §dOil Processing§r, or by dehydrating §9Ethanol§r with §9Sulfuric Acid§r in a §3Chemical Reactor§r. Choose a method that works for you:\n\n- The §9Ethanol§r route allows you to use your existing §6Sugarcane§r farm to produce §9Ethylene§r. However, the recipes require §bMedium Voltage§r machines to run.\n\n- The §dOil Processing§r route requires §2only LV machines§r, but you will have to source §9Oil§r, or its variants, from somewhere. §2Severely Steam-Cracked Light Fuel§r is most efficient with §9Oil§r and §9Heavy Oil§r. §2Severely Steam-Cracked Naphtha§r is more efficient when you are using §9Raw Oil§r and §9Light Oil§r.\n\nIt is an extremely important chemical in the production of plastics, as you\u0027ll need §9Ethylene§r in your production of §9Polyethylene (PE)§r, §9Polyvinyl Chloride (PVC)§r, and can be used in the production of §9Styrene-Butadiene Rubber (SBR)§r, the best form of rubber.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7517,15 +7529,15 @@ }, "104:10": { "preRequisites:11": [ + 89, 96, 109, - 110, - 89 + 110 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\n§2With PAE2, recipes with tools have been improved by a huge amount. However, still aim for recipes without tools.§r\n\nUse recipes that use machines instead!\n\n", + "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\n§2With PAE2, recipes with tools have been improved by a huge amount. However, still aim for recipes without tools.§r\n\nUse recipes that use machines instead!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7654,8 +7666,8 @@ }, "106:10": { "preRequisites:11": [ - 104, - 62 + 62, + 104 ], "properties:10": { "betterquesting:10": { @@ -7789,8 +7801,8 @@ }, "108:10": { "preRequisites:11": [ - 109, - 100 + 100, + 109 ], "properties:10": { "betterquesting:10": { @@ -7862,7 +7874,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to §29 stacks of 512 items (or 4608 items)§r for passive autocrafting and to push into other inventories. Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.\n\n", + "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to §29 stacks of 512 items (or 4608 items)§r for passive autocrafting and to push into other inventories. Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7998,8 +8010,8 @@ }, "111:10": { "preRequisites:11": [ - 105, - 62 + 62, + 105 ], "properties:10": { "betterquesting:10": { @@ -8347,7 +8359,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.", + "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.\n\nAt first, you will have to create §6Black Bronze Dust§r on the way to §6Black Steel Dust§r. By making an §6HV Mixer§r, you can skip this step with a shortcut recipe.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8951,7 +8963,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.\n\n", + "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9388,8 +9400,8 @@ "132:10": { "preRequisites:11": [ 35, - 203, - 52 + 52, + 203 ], "properties:10": { "betterquesting:10": { @@ -9788,7 +9800,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6§2Rhodium Plated Lumium-Palladium§r,§6 Niobium-Titanium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", + "desc:8": "With §2Rhodium Plated Lumium-Palladium§r,§6 Niobium-Titanium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10441,7 +10453,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r. \n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nYou should have set up a §3Vaccum Freezer§r for §6Kanthal§r, but if you haven\u0027t done it yet or want to improve your setup, routing through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering you\u0027re system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", + "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r.\n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nRouting through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering your system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10494,7 +10506,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Vacuum Freezers§r are primarily used to cool down hot ingots.\n\nThey\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", + "desc:8": "§3Vacuum Freezers§r are primarily used to cool down §6Hot Ingots§r. They\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nThe energy tier required for the Vacuum Freezer is typically one tier below the tier used to process the ingot in the §3Electric Blast Furnace§r. \n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10548,6 +10560,12 @@ "Damage:2": 1002, "OreDict:8": "", "id:8": "gregtech:machine" + }, + "1:10": { + "Count:3": 14, + "Damage:2": 3, + "OreDict:8": "", + "id:8": "gregtech:metal_casing" } }, "taskID:8": "bq_standard:retrieval" @@ -10562,7 +10580,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§6§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.\n\n", + "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10765,7 +10783,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With tier three circuits in hand, it\u0027s time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The § §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", + "desc:8": "With tier three circuits in hand, it\u0027s time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11059,13 +11077,13 @@ }, "158:10": { "preRequisites:11": [ - 157, - 150 + 150, + 157 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11658,7 +11676,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Water§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", + "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Oxygen§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11793,7 +11811,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Palladium§r is found in §6Palladium Ore§r, which is found alongside §6Platinum Ore§r. §You can also get Palladium from Platinum Group Processing§r. If you haven\u0027t found a vein yet, you should buy some.\n\nPalladium is smelted in the §3Electric Blast Furnace§r.", + "desc:8": "§6Palladium§r is found in §6Palladium Ore§r, which is found alongside §6Platinum Ore§r. ou can also get Palladium from Platinum Group Processing§r. If you haven\u0027t found a vein yet, you should buy some.\n\nPalladium is smelted in the §3Electric Blast Furnace§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11928,7 +11946,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.\n", + "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12131,7 +12149,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products. Make sure you set the correct circuit configuration for the dimension you are in.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products. Make sure you set the correct circuit configuration for the dimension you are in.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12816,7 +12834,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts either Oil, Raw Oil, Light Oil or Heavy Oil.§r\n\nPetrochemistry is the category of organic chemistry pertaining to petroleum, otherwise known as §9Oil§r.\n\n§bGregTech§r\u0027s petrochemistry may seem daunting at first, given the sheer number of chemicals and processing options, but it\u0027s actually easier to get into than you think.\n\nOil is the starting point, and can be found in several variants which you can pump from finite natural wells on the Overworld, as well as coming renewably from §6Oilsands Ore§r and §6Soul Sand§r, and directly in liquid form from a §3Fluid Rig§r.\n\n§2The Fluid Rig can also harvest Raw Oil, Heavy Oil and Light Oil depending on your fluid vein. Raw Oil is similar to Oil, giving the same ratios when distilled but needing double the fluid. Heavy Oil and Light Oil give different ratios when distilled.§r \n\nStart off by distilling the Oil. This will result in §9Sulfuric Heavy Fuel§r, §9Sulfuric Light Fuel§r, §9Sulfuric Naphtha§r, and/or §9Sulfuric Gas§r.\n\nThese will all need to be hydrodesulfurized using §9Hydrogen§r in a §3Chemical Reactor§r or §2Oil Cracking Unit§r, which produces the non-Sulfuric versions.\n\nAll of these products are useful, so figure out how you want to store the variety and large quantities of fluids.\n\nThe upcoming quests will guide you through the basics of petrochemistry. Once you\u0027ve mastered that, feel free to explore further.\n", + "desc:8": "§oNote: this quest accepts either Oil, Raw Oil, Light Oil or Heavy Oil.§r\n\nPetrochemistry is the category of organic chemistry pertaining to petroleum, otherwise known as §9Oil§r.\n\n§bGregTech§r\u0027s petrochemistry may seem daunting at first, given the sheer number of chemicals and processing options, but it\u0027s actually easier to get into than you think.\n\nOil is the starting point, and can be found in several variants which you can pump from finite natural wells on the Overworld, as well as coming renewably from §6Oilsands Ore§r and §6Soul Sand§r, and directly in liquid form from a §3Fluid Rig§r.\n\n§2The Fluid Rig can also harvest Raw Oil, Heavy Oil and Light Oil depending on your fluid vein. Raw Oil is similar to Oil, giving the same ratios when distilled but needing double the fluid. Heavy Oil and Light Oil give different ratios when distilled.§r \n\nStart off by distilling the Oil. This will result in §9Sulfuric Heavy Fuel§r, §9Sulfuric Light Fuel§r, §9Sulfuric Naphtha§r, and/or §9Sulfuric Gas§r.\n\nThese will all need to be hydrodesulfurized using §9Hydrogen§r in a §3Chemical Reactor§r or §2Oil Cracking Unit§r, which produces the non-Sulfuric versions.\n\nAll of these products are useful, so figure out how you want to store the variety and large quantities of fluids.\n\nThe upcoming quests will guide you through the basics of petrochemistry. Once you\u0027ve mastered that, feel free to explore further.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13280,6 +13298,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 569, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -13691,12 +13727,12 @@ }, "197:10": { "preRequisites:11": [ - 201 + 311 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14465,7 +14501,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.\n\n", + "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14611,7 +14647,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r. ", + "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14746,7 +14782,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.\n", + "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14915,13 +14951,13 @@ }, "214:10": { "preRequisites:11": [ - 232, - 55 + 55, + 232 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Rutile Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).\n\n\n", + "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Bauxite Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15051,8 +15087,8 @@ "216:10": { "preRequisites:11": [ 89, - 897, - 214 + 214, + 895 ], "properties:10": { "betterquesting:10": { @@ -15187,7 +15223,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n§\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.\n\n", + "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15785,7 +15821,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.\n", + "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15847,13 +15883,13 @@ }, "228:10": { "preRequisites:11": [ - 490, - 29 + 29, + 490 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThis quest calls for a §aRedstone Timer§r, but there are other ways to make snad grow sugar cane even faster (like a vanilla observer clock pointing into the Snad). Make sure to set the timer to pulse as fast as possible.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", + "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThe premier way to activate Snad is with a §6Redstone Conduit§r. By force-connecting the conduit to the side of the Snad block with a Wrench, and inserting a §aSensor Filter§r, you can get the highest growth rate possible. Simpler methods such as a §aRedstone Clock§r can also work, but not as effectively.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15913,21 +15949,39 @@ "Damage:2": 0, "OreDict:8": "", "id:8": "enderio:block_vacuum_chest" - }, - "2:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", - "id:8": "extrautils2:redstoneclock" + "id:8": "enderio:item_redstone_conduit" }, - "3:10": { + "1:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "enderio:item_redstone_sensor_filter" + }, + "2:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", "id:8": "storagedrawers:upgrade_void" } }, - "taskID:8": "bq_standard:retrieval" + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -16385,8 +16439,8 @@ }, "236:10": { "preRequisites:11": [ - 894, 96, + 894, 1041 ], "properties:10": { @@ -16521,16 +16575,16 @@ }, "238:10": { "preRequisites:11": [ - 250, 241, + 250, + 258, 330, - 411, - 258 + 411 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r§r and the other items are otherwise craftable.", + "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r and the other items are otherwise craftable.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16667,7 +16721,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a decent quantity of §6Neutronium§r. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", + "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a large quantity of §6Neutronium§r. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16735,7 +16789,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17843,7 +17897,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18205,15 +18259,15 @@ }, "262:10": { "preRequisites:11": [ + 207, 385, 387, - 207, - 253 + 827 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes. ", + "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18280,7 +18334,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Small Piles of Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.\n", + "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\nThere is an alternative recipe set to §9Programmed Circuit §64§r, which performs the recipe in a larger batch and §2allows you to skip combining small piles into full dusts.§r\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19258,8 +19312,8 @@ }, "278:10": { "preRequisites:11": [ - 682, - 30 + 30, + 682 ], "properties:10": { "betterquesting:10": { @@ -19337,7 +19391,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.\n\n", + "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19346,7 +19400,7 @@ "id:8": "minecraft:dragon_egg" }, "ignoresview:1": 0, - "ismain:1": 0, + "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, "name:8": "Breaking Some Eggs", @@ -19942,8 +19996,8 @@ "287:10": { "preRequisites:11": [ 234, - 847, - 286 + 286, + 847 ], "properties:10": { "betterquesting:10": { @@ -20109,12 +20163,12 @@ }, "289:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 839, - 313 + 313, + 839 ], "properties:10": { "betterquesting:10": { @@ -20759,7 +20813,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.\n\n", + "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -21591,12 +21645,13 @@ }, "311:10": { "preRequisites:11": [ - 197 + 201, + 827 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", + "desc:8": "§6RTM-Alloy§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -21608,7 +21663,7 @@ "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, - "name:8": "Tungstensteel Coil Blocks", + "name:8": "RTM-Alloy Coil Blocks", "partysinglereward:1": 0, "questlogic:8": "AND", "repeat_relative:1": 1, @@ -21663,7 +21718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22589,7 +22644,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.\n", + "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23124,14 +23179,14 @@ }, "335:10": { "preRequisites:11": [ - 334, 196, + 334, 1038 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.\n", + "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23404,7 +23459,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\nEV motors require a better material than §6Steel§r for its magnetism. §6\n\nNeodynium§r is required, which is mainly achieved from §6Rare Earth§r. The main sources of this are §6Redstone§r, and everything inside of §6Bastnasite§r veins.\n\n§2Starting at EV, 4A Energy and Dynamo hatches are available at each tier.", + "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\nEV motors require a better material than §6Steel§r for its magnetism. §6\n\nNeodynium§r is required, which is mainly achieved from §6Rare Earth§r. The main sources of this are §6Redstone§r, and everything inside of §6Bastnasite§r veins.\n\nEV Machine Hulls unlock a handful of nice things. Check the surrounding quests for more information.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -25051,7 +25106,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNow this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.§r\n\nThe §dCreative Tank§r is a major milestone. Great work!\n\nThis tank is your first proper creative item, which can be set to a fluid and then provides an infinite quantity of that fluid. §2Use the Creative Tank Provider to supply you with Creative Tanks.\n\nThe GT Creative Tank has been enhanced. You can turn it on and off, configure exactly how much fluid you want it to push and how often, and change which direction the fluid is pushed out. You can even configure the fluid you want directly from JEI!§r\n\nFrom there you can set up tanks with infinite quantities of every fluid you can think of. §3Fluid Solidifiers§r §2or the much more powerful Large Solidification Arrays§r can be used to make infinite of every element you can melt and solidify.\n\nThis is quite a game-changer as far as infrastructure goes. You\u0027ll find that many machines won\u0027t need to be used for their original purpose anymore. Some major base redesign is in order. Have you considered moving to space?\n\nAll that said, §ethe pack will still be challenging to complete§r. Infinite resources and power is nice, but it\u0027s not everything. There are plenty of materials you can\u0027t melt, and creative items will push your factory automation engineering skills to their limits.\n\nOnward to the final challenge: the §dCreative Chest§r!\n\n", + "desc:8": "§oNow this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.§r\n\nThe §dCreative Tank§r is a major milestone. Great work!\n\nThis tank is your first proper creative item, which can be set to a fluid and then provides an infinite quantity of that fluid. §2Use the Creative Tank Provider to supply you with Creative Tanks.\n\nThe GT Creative Tank has been enhanced. You can turn it on and off, configure exactly how much fluid you want it to push and how often, and change which direction the fluid is pushed out. You can even configure the fluid you want directly from JEI!§r\n\nFrom there you can set up tanks with infinite quantities of every fluid you can think of. §3Fluid Solidifiers§r §2or the much more powerful Large Solidification Arrays§r can be used to make infinite of every element you can melt and solidify.\n\nThis is quite a game-changer as far as infrastructure goes. You\u0027ll find that many machines won\u0027t need to be used for their original purpose anymore. Some major base redesign is in order. Have you considered moving to space?\n\nAll that said, §ethe pack will still be challenging to complete§r. Infinite resources and power is nice, but it\u0027s not everything. There are plenty of materials you can\u0027t melt, and creative items will push your factory automation engineering skills to their limits.\n\nOnward to the final challenge: the §dCreative Chest§r!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26152,7 +26207,6 @@ }, "389:10": { "preRequisites:11": [ - 251, 262, 386 ], @@ -26740,7 +26794,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nShift and hover over different coil blocks: they tell you the number of items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of §6Tungstensteel§r coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r, and §21 maintenance hatch§r, §21 muffler hatch§r, and at least §a1 energy hatch§r, all of any tier.\n\n", + "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nShift and hover over different coil blocks: they tell you the number of items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of §6Tungstensteel§r coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r, and §21 maintenance hatch§r, §21 muffler hatch§r, and at least §a1 energy hatch§r, all of any tier.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26813,7 +26867,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.", + "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.\n\nGenerally, the best plasma fuels to use will be §eHelium Plasma§r with a §3Fusion Reactor Mk1§r, §eTin Plasma§r when you upgrade to §3Mk2§r, and §eAmericium Plasma§r when you upgrade to §3Mk3§r. However, the other plasmas are still competitive, and your setup might lend itself better to a different plasma.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27025,7 +27079,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. These are seperate on each side of the machine, meaning you can have up to six different covers! To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine. This quest accepts a §aScrewdriver§r and §aCrowbar§r made from any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §lDetector§2: Available in Item, Fluid, Energy, Activity, and Advanced Activity flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §lDigital Interface§r: §2A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.§r\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.\n", + "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. These are seperate on each side of the machine, meaning you can have up to six different covers! To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine. This quest accepts a §aScrewdriver§r and §aCrowbar§r made from any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §lDetector§r: Available in §aItem§r, §aFluid§r, §aEnergy§r, and §aActivity§r flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §lAdvanced Detectors§r: Available as §aItem§r, §aFluid§r, §aEnergy§r, or §aActivity§r, these covers can emit redstone in more ways than their normal counterparts. Specifically, the §aItem§r, §aFluid§r, and §aEnergy§r advanced detectors can emit a latched redstone signal based on the amount of item/fluid between a set min and max, or they can emit redstone signals proportional to the amount of item/fluids between a set min and max. The §aAdvanced Activity Detector§r emits redstone proportional to a machines progress on a recipe \n\n- §lDigital Interface§r: A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27264,7 +27318,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r or §6Platinum Group Processing§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §ovastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r anywhere you want. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.\n\n", + "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r or §6Platinum Group Processing§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §ovastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r anywhere you want. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27737,7 +27791,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!\n", + "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -30908,7 +30962,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", + "desc:8": "§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -30975,7 +31029,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but most presently you will need it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.", + "desc:8": "§oThis quest accepts any Autoclave from LV to IV.§r\n\nAn §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but most presently you will need it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.\n\n§6Pulsating Crystals§r will be required immediately to make §aSnad§r, the key to infinite fuel.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31027,7 +31081,7 @@ "0:10": { "Count:3": 1, "Damage:2": 125, - "OreDict:8": "", + "OreDict:8": "questbookAutoclave", "id:8": "gregtech:machine" } }, @@ -31249,8 +31303,8 @@ }, "494:10": { "preRequisites:11": [ - 102, - 62 + 62, + 102 ], "properties:10": { "betterquesting:10": { @@ -31904,7 +31958,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31971,7 +32025,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Brewery.\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics. §2An alternative and more resource efficient way of making biomass is with a Pyrolyse Oven, Water, and Bio Chaff.", + "desc:8": "§oThis quest accepts any Brewery from LV to IV.§r\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics. §2An alternative and more resource efficient way of making biomass is with a Pyrolyse Oven, Water, and Bio Chaff.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32211,7 +32265,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32282,9 +32336,9 @@ "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 32012, + "Damage:2": 12, "OreDict:8": "", - "id:8": "gregtech:wire_octal" + "id:8": "nomilabs:wire_octal" }, "ignoresview:1": 0, "ismain:1": 1, @@ -32329,9 +32383,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32012, + "Damage:2": 12, "OreDict:8": "", - "id:8": "gregtech:wire_single" + "id:8": "nomilabs:wire_single" } }, "taskID:8": "bq_standard:retrieval" @@ -32431,10 +32485,10 @@ }, "511:10": { "preRequisites:11": [ - 296, - 272, + 18, 26, - 18 + 272, + 296 ], "properties:10": { "betterquesting:10": { @@ -32574,7 +32628,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33277,7 +33331,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Assembling Machine§r.\n\nRequires a bunch of standard circuit components.", + "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Circuit Assembler§r.\n\nRequires a bunch of standard circuit components.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33475,14 +33529,14 @@ }, "527:10": { "preRequisiteTypes:7": [ - 0, 2, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, + 235, 275, - 235 + 311 ], "properties:10": { "betterquesting:10": { @@ -33554,7 +33608,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.\n", + "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33763,7 +33817,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Assembling Machine§r.", + "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Circuit Assembler§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33892,14 +33946,14 @@ }, "533:10": { "preRequisiteTypes:7": [ + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 535, - 536, - 325 + 536 ], "properties:10": { "betterquesting:10": { @@ -34041,7 +34095,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nThis is the first tier of Circuit which must be §2researched§r in the §3Research Station§r.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Assembling Machine§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.\n", + "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nThis is the first tier of Circuit which must be §2researched§r in the §3Research Station§r.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Circuit Assembler§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34108,7 +34162,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dCreative Tank§r. Multiblock hatches are a different matter: feel free to upgrade your §3EBF§rs to Ultimate Voltage, if you can handle the power drain.\n", + "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dCreative Tank§r. Multiblock hatches are a different matter: feel free to upgrade your §3EBF§rs to Ultimate Voltage, if you can handle the power drain.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34343,9 +34397,9 @@ "540:10": { "preRequisites:11": [ 21, + 76, 147, - 259, - 76 + 259 ], "properties:10": { "betterquesting:10": { @@ -34480,8 +34534,8 @@ "542:10": { "preRequisites:11": [ 197, - 296, - 209 + 209, + 296 ], "properties:10": { "betterquesting:10": { @@ -34553,7 +34607,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34792,7 +34846,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts both LV and MV Distillery. §2\n\nIf you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r. Therefore, it is recommended for fluids with only one useful output, like §9Biomass§r, §9Diluted Sulfuric Acid§r, and §9Diluted Hydrochloric Acid§r.\n\nHowever, the Distillation Tower is recommended for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nYou\u0027re going to need it soon!\n\n", + "desc:8": "§oNote: this quest accepts both LV and MV Distillery. §2\n\nIf you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r. Therefore, it is recommended for fluids with only one useful output, like §9Biomass§r, §9Diluted Sulfuric Acid§r, and §9Diluted Hydrochloric Acid§r.\n\nHowever, the Distillation Tower is recommended for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nYou\u0027re going to need it soon!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34982,7 +35036,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", + "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35055,6 +35109,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "extrautils2:angelblock" + } + }, + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -36498,7 +36570,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nDespite this, you\u0027ll still need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.\n\n", + "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nDespite this, you\u0027ll still need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36603,7 +36675,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36670,7 +36742,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36737,7 +36809,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36804,7 +36876,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36872,7 +36944,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36939,7 +37011,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37007,7 +37079,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37074,7 +37146,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37179,7 +37251,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37246,7 +37318,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37313,7 +37385,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37380,7 +37452,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37447,7 +37519,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37514,7 +37586,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37581,7 +37653,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37648,7 +37720,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37716,7 +37788,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37784,7 +37856,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37851,7 +37923,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37918,7 +37990,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -37985,7 +38057,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38217,7 +38289,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r, §2or from the Tier Eight Micro Miner.§r\n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.\n", + "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r, §2or from the Tier Eight Micro Miner.§r\n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38288,9 +38360,9 @@ "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 32028, + "Damage:2": 28, "OreDict:8": "", - "id:8": "gregtech:wire_single" + "id:8": "nomilabs:wire_single" }, "ignoresview:1": 0, "ismain:1": 1, @@ -38335,9 +38407,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32028, + "Damage:2": 28, "OreDict:8": "", - "id:8": "gregtech:wire_single" + "id:8": "nomilabs:wire_single" } }, "taskID:8": "bq_standard:retrieval" @@ -38414,8 +38486,8 @@ }, "610:10": { "preRequisites:11": [ - 344, - 233 + 233, + 344 ], "properties:10": { "betterquesting:10": { @@ -38627,7 +38699,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38694,7 +38766,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38761,7 +38833,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38828,7 +38900,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38895,7 +38967,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38962,7 +39034,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39030,7 +39102,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39098,7 +39170,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39165,7 +39237,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39227,13 +39299,13 @@ }, "622:10": { "preRequisites:11": [ - 953, - 10 + 10, + 953 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39300,7 +39372,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39367,7 +39439,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39434,7 +39506,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39501,7 +39573,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39568,7 +39640,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39635,7 +39707,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39702,7 +39774,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39769,7 +39841,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39836,7 +39908,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39903,7 +39975,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39970,7 +40042,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40037,7 +40109,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40102,7 +40174,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40169,7 +40241,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40236,7 +40308,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40303,7 +40375,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40370,7 +40442,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40437,7 +40509,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40504,7 +40576,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40571,7 +40643,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40638,7 +40710,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40705,7 +40777,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40767,13 +40839,13 @@ }, "645:10": { "preRequisites:11": [ - 952, - 10 + 10, + 952 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40840,7 +40912,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40907,7 +40979,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40974,7 +41046,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41041,7 +41113,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -41108,7 +41180,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41176,7 +41248,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41244,7 +41316,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41311,7 +41383,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41378,7 +41450,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41445,7 +41517,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41512,7 +41584,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41579,7 +41651,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41646,7 +41718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41713,7 +41785,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41780,7 +41852,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41847,7 +41919,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41914,7 +41986,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41981,7 +42053,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42048,7 +42120,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42115,7 +42187,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42182,7 +42254,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42249,7 +42321,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42317,7 +42389,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42384,7 +42456,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6§6Plutonium 239§r, and §6Plutonium 241§r.", + "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6Plutonium 239§r, and §6Plutonium 241§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42504,7 +42576,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r, made from Thorium enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6§6Neptunium 236§r, and §6Neptunium 237§r.", + "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r, made from Thorium enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6Neptunium 236§r, and §6Neptunium 237§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42577,7 +42649,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\n", + "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\nYou may find Red Granite as a viable source of Uranium-238 if you are able to process it in large enough volumes to offset the low base chance.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42650,7 +42722,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.\n", + "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42787,8 +42859,8 @@ "675:10": { "preRequisites:11": [ 669, - 674, - 673 + 673, + 674 ], "properties:10": { "betterquesting:10": { @@ -42933,7 +43005,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", + "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43189,7 +43261,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §aImplosion Compressor§r is like an autoclave that uses explosions instead of water. \n\nIt is the only way to turn some gem dusts into gemstones. However, for some gemstones, like §6Apatite§r, it is much more efficient to use an §3Autoclave§r§r with §9Distilled Water§r.\n\nIt will also be vital for processing §5Motes of Omnium§r.\n\nIn addition to the controller and casings, you will need one §eLV or better§r §6Item Input Bus§r, §6Item Output Bus§r, and §6Energy Input Hatch§r.\n\n§2If desired, you may upgrade this directly to an Electric Implosion Compressor, which has no improvements over the base multi for now.", + "desc:8": "The §aImplosion Compressor§r is like an autoclave that uses explosions instead of water. \n\nIt is the only way to turn some gem dusts into gemstones. However, for some gemstones, like §6Apatite§r, it is much more efficient to use an §3Autoclave§r with §9Distilled Water§r.\n\nIt will also be vital for processing §5Motes of Omnium§r.\n\nIn addition to the controller and casings, you will need one §eLV or better§r §6Item Input Bus§r, §6Item Output Bus§r, and §6Energy Input Hatch§r.\n\n§2If desired, you may upgrade this directly to an Electric Implosion Compressor, which has no improvements over the base multi for now.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43400,7 +43472,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.\n\n", + "desc:8": "§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45555,13 +45627,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §6Ore Byproduct Page§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and a guaranteed 3 tiny piles of byproduct. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3Centrifuge§r: separates Pure or Impure dusts into the final material, producing a guaranteed §21 (nerfed from 3) tiny pile of byproduct§r.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 3 additional tiny piles of byproduct, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.\n", + "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §6Ore Byproduct Page§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and 1/3 of a byproduct dust. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3Centrifuge§r: separates Pure or Impure dusts into the final material, producing 1/9 byproduct dust.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 1/3 byproduct dust, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 4, + "Damage:2": 39, "OreDict:8": "", - "id:8": "gregtech:meta_dust_tiny" + "id:8": "gregtech:meta_dust" }, "ignoresview:1": 0, "ismain:1": 0, @@ -45595,7 +45667,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis is an important part of a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation of how to passively automate this.\n\n§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nWith Resonant Clathrates now accessible, everything you need for crafting §6Pulsating Polymer Clay§r can be automated in a net-positive loop.§r Doing so is the first step in automation of §bDeep Mob Evolution§r, which is §ea primary source of important materials for the rest of the pack§r.\n\nThe exact implementation is up to you. Make use of the various LV and MV machines you have, and look through §bJEI§r and the Processing Lines Tab for the ways to get infinite sources of each ingredient (like §aEnderman Models§r for pearls).\n\n", + "desc:8": "§oThis is an important part of a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation of how to passively automate this.\n\n§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nWith Resonant Clathrates now accessible, everything you need for crafting §6Pulsating Polymer Clay§r can be automated in a net-positive loop.§r Doing so is the first step in automation of §bDeep Mob Evolution§r, which is §ea primary source of important materials for the rest of the pack§r.\n\nThe exact implementation is up to you. Make use of the various LV and MV machines you have, and look through §bJEI§r and the Processing Lines Tab for the ways to get infinite sources of each ingredient (like §aEnderman Models§r for pearls).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45730,7 +45802,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.\n\n", + "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45770,7 +45842,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them. An alternative to this is storage buses on §3Gregtech Tanks and Drums§r.\n\n", + "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them. An alternative to this is storage buses on §3Gregtech Tanks and Drums§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -46403,12 +46475,12 @@ }, "745:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, - 235 + 235, + 311 ], "properties:10": { "betterquesting:10": { @@ -46576,7 +46648,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r. Keep in mind that §dMending§r does not work on §3Gregtech Tools§r.\n\n", + "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r. Keep in mind that §dMending§r does not work on §3Gregtech Tools§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -46712,7 +46784,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", + "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -46797,13 +46869,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r, or a §2Alloy Blast Smelter§r.\n\n§6Enderium§r doesn\u0027t require much power (running on as little as MV) but it does need a lot of heat and is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.\n\n", + "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r, or a §2Alloy Blast Smelter§r.\n\n§6Enderium§r is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 167, + "Damage:2": 18, "OreDict:8": "", - "id:8": "thermalfoundation:material" + "id:8": "nomilabs:meta_ingot" }, "ignoresview:1": 0, "ismain:1": 1, @@ -46848,9 +46920,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32018, + "Damage:2": 18, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" } }, "taskID:8": "bq_standard:retrieval" @@ -47095,15 +47167,15 @@ }, "1:10": { "Count:3": 2, - "Damage:2": 32018, + "Damage:2": 18, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" }, "2:10": { "Count:3": 3, - "Damage:2": 32010, + "Damage:2": 10, "OreDict:8": "", - "id:8": "gregtech:meta_nugget" + "id:8": "nomilabs:meta_nugget" } }, "taskID:8": "bq_standard:retrieval" @@ -47591,7 +47663,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.\n\n", + "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47642,9 +47714,9 @@ "requiredItems:9": { "0:10": { "Count:3": 1, - "Damage:2": 32001, + "Damage:2": 1, "OreDict:8": "", - "id:8": "gregtech:meta_dust" + "id:8": "nomilabs:meta_dust" }, "1:10": { "Count:3": 3, @@ -48065,7 +48137,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.\n", + "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48259,7 +48331,7 @@ "0:10": { "Count:3": 1, "Damage:2": 440, - "OreDict:8": "", + "OreDict:8": "questbookLathe", "id:8": "gregtech:machine" } }, @@ -48438,7 +48510,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy.\n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and more information on the §6Stabilizers§r and §6Pylons§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, § the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nIt is recommended to postpone Tier 8 until after you reach the §dCreative Tank§r, as it requires large amounts of §6Awakened Draconium§r.\n\n", + "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy.\n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and more information on the §6Stabilizers§r and §6Pylons§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nIt is recommended to postpone Tier 8 until after you reach the §dCreative Tank§r, as it requires large amounts of §6Awakened Draconium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48517,7 +48589,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis is represented in a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation.§r\n\nNow that you have acquired §6Steel§r, your path to infinite cobblestone awaits! The §6Cobblestone Generator§r continuously outputs cobblestone into adjacent inventories, and can be upgraded to produce it even faster.\n\nCobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Clay§r which is both a reliable source of §6Aluminium§r and very important for automating §bDeep Mob Evolution§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.\n", + "desc:8": "§oThis is represented in a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation.§r\n\nNow that you have acquired §6Steel§r, your path to infinite cobblestone awaits! The §6Cobblestone Generator§r continuously outputs cobblestone into adjacent inventories, and can be upgraded to produce it even faster.\n\nCobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Clay§r which is both a reliable source of §6Aluminium§r and very important for automating §bDeep Mob Evolution§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48731,13 +48803,97 @@ } }, "782:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Starting at §5EV§r, 4A Energy and Dynamo hatches are available at each tier. From §1IV§r onwards, 16A hatches will be available.\n\nNote that these hatches will not allow you to \"skip\" tiers! The maximum §erecipe tier§r a multiblock can run is determined by the tier of the hatch. If two hatches of the same tier are in the multiblock, the recipe tier will be increased to the next higher tier.\n\nInstead, these hatches can allow you to overclock recipes you can already do even more. The §eoverclock tier§r is the total EU/t input summed across all hatches.\n\nExamples:\n\n- 2x §7LV§r hatch -\u003e §bMV§r recipe tier, §bMV§r OC tier\n\n- 16A §1IV§r hatch -\u003e §1IV§r recipe tier, §cZPM§r OC tier\n\n- 2x 16A §1IV§r hatch -\u003e §dLuV§r recipe tier, 2A §cZPM§r OC tier\n\nIf in doubt, check the multiblock\u0027s GUI. It will show the max recipe tier, as well as max EU/t for overclocking.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "High Amperage Energy Hatches", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 782, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin25" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1245, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:optional_retrieval" + } + } + }, + "783:10": { "preRequisites:11": [ 897 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aTurbine Rotor§r to go into each §3Rotor Holder§r§r. The Turbine Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Turbine Rotor also has a Durability, which is the number of seconds it will last. These Turbine Rotors are tools, so you can only see one type in JEI, but you can see uses of the Turbine Blade of the material to see its stats. \n\n§aExample: §r§6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", + "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aTurbine Rotor§r to go into each §3Rotor Holder§r. The Turbine Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Turbine Rotor also has a Durability, which is the number of seconds it will last. These Turbine Rotors are tools, so you can only see one type in JEI, but you can see uses of the Turbine Blade of the material to see its stats. \n\n§aExample: §6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48769,7 +48925,7 @@ } } }, - "783:10": { + "784:10": { "preRequisites:11": [ 282 ], @@ -48835,14 +48991,14 @@ } } }, - "784:10": { + "785:10": { "preRequisites:11": [ 72 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Silicone Rubber or Styrene-Butadiene Rubber.\n\n§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§9§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with, but coats wires less efficiently. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.\n\n§2To make Styrene-Butadiene Rubber, you will need to create Raw Styrene-Butadiene Rubber Dust in one of several ways, then mix it with Sulfur in a Chemical Reactor. This produces more liquid than Silicon Rubber, as well as being a more efficient way to coat wires.\n", + "desc:8": "§oNote: this quest accepts Silicone Rubber or Styrene-Butadiene Rubber.\n\n§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with, but coats wires less efficiently. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.\n\n§2To make Styrene-Butadiene Rubber, you will need to create Raw Styrene-Butadiene Rubber Dust in one of several ways, then mix it with Sulfur in a Chemical Reactor. This produces more liquid than Silicon Rubber, as well as being a more efficient way to coat wires.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48915,7 +49071,7 @@ } } }, - "785:10": { + "786:10": { "preRequisiteTypes:7": [ 2 ], @@ -48957,7 +49113,7 @@ } } }, - "786:10": { + "787:10": { "preRequisites:11": [ 81, 272, @@ -48966,7 +49122,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks, or even §aDiamond Tools§r using diamonds from your §3Deep Mob Evolution§r setup.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.\n\n", + "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks, or even §aDiamond Tools§r using diamonds from your §3Deep Mob Evolution§r setup.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49025,14 +49181,14 @@ } } }, - "787:10": { + "788:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.\n", + "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49091,14 +49247,14 @@ } } }, - "788:10": { + "789:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", + "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49169,14 +49325,14 @@ } } }, - "789:10": { + "790:10": { "preRequisites:11": [ 72 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.\n", + "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49235,7 +49391,7 @@ } } }, - "790:10": { + "791:10": { "preRequisites:11": [ 524, 798 @@ -49243,7 +49399,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.\n\n", + "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49308,7 +49464,7 @@ } } }, - "791:10": { + "792:10": { "preRequisites:11": [ 172, 177 @@ -49375,7 +49531,7 @@ } } }, - "792:10": { + "793:10": { "preRequisites:11": [ 27 ], @@ -49447,7 +49603,7 @@ } } }, - "793:10": { + "794:10": { "preRequisites:11": [ 792, 793 @@ -49482,7 +49638,7 @@ "rewards:9": {}, "tasks:9": {} }, - "794:10": { + "795:10": { "preRequisites:11": [ 796 ], @@ -49508,7 +49664,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -49545,10 +49701,28 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 598, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, - "795:10": { + "796:10": { "preRequisites:11": [ 323 ], @@ -49614,7 +49788,7 @@ } } }, - "796:10": { + "797:10": { "preRequisites:11": [ 796 ], @@ -49680,7 +49854,7 @@ } } }, - "797:10": { + "798:10": { "preRequisites:11": [ 675, 676 @@ -49747,7 +49921,7 @@ } } }, - "798:10": { + "799:10": { "preRequisites:11": [ 545, 745 @@ -49804,9 +49978,9 @@ }, "1:10": { "Count:3": 2, - "Damage:2": 32010, + "Damage:2": 10, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "nomilabs:meta_ingot" }, "2:10": { "Count:3": 3, @@ -49819,7 +49993,7 @@ } } }, - "799:10": { + "800:10": { "preRequisites:11": [ 162, 416, @@ -49855,7 +50029,7 @@ "rewards:9": {}, "tasks:9": {} }, - "800:10": { + "801:10": { "preRequisites:11": [ 154 ], @@ -49933,7 +50107,7 @@ } } }, - "801:10": { + "802:10": { "preRequisites:11": [ 325 ], @@ -49999,7 +50173,7 @@ } } }, - "802:10": { + "803:10": { "preRequisiteTypes:7": [ 2 ], @@ -50009,7 +50183,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r.\n\nTo create a portal, you must place a §aBed§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r You can use the §e/sethome§r command to register where your house is, and §e/home§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r§r. §6Skeleton Skulls§r would be the way to go in that case.", + "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r.\n\nTo create a portal, you must place a §aBed§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r You can use the §e/sethome§r command to register where your house is, and §e/home§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r. §6Skeleton Skulls§r would be the way to go in that case.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50080,7 +50254,7 @@ } } }, - "803:10": { + "804:10": { "preRequisites:11": [ 107, 286 @@ -50088,7 +50262,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Assembly Line§r is a particularly unusual multiblock from an automation standpoint. Up until now, it has been possible to dump ingredients into a single input bus. Clearly, this won\u0027t work for the Assembly line, since it has a whole bunch of ULV inputs buses that hold one item stack each.\n\nYou might be tempted to dump everything into a chest and route items around to specific buses with §aItem Conduits§r. You\u0027ll probably find this to be slow, prone to jamming, and inflexible when you want to run different recipes.\n\nIf you\u0027ve unlocked §3The Empowerer§r, you might have considered §aPhantomfaces§r. These would certainly be an improvement over item conduits, but there\u0027s an even better solution.\n\nEnter §aItem Laser Relays§r§r: these handy tools from §bActually Additions§r allow you to create a virtual inventory out of multiple real ones; that is, you can use them to make other automation think that all of the input buses are the same inventory.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r Take this into account when placing them.\n\nTo start, place a laser on each of the input buses. Then, place the §aItem Interface§r adjacent to the laser on the first input bus. This will serve as the access point to the virtual inventory where you can connect things like an § §aME Interface§r.\n\nIf you don\u0027t have enough space in a normal pattern, try using the §6Extended Processing Pattern Terminal§r!\n\nTake your §aLaser Wrench§r and right click the first laser relay, then the second laser relay, to link them together. Repeat this with the second and third relays, third and fourth relays, etc. until they have all been linked together. Now you have a laser network virtualizing all of the input buses!\n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nRemember to always use §eBlocking Mode§r when connecting the laser network to on-demand crafting. If you don\u0027t use Blocking Mode, you are likely to accidentally craft something else and jam your Assembly Line.", + "desc:8": "The §3Assembly Line§r is a particularly unusual multiblock from an automation standpoint. Up until now, it has been possible to dump ingredients into a single input bus. Clearly, this won\u0027t work for the Assembly line, since it has a whole bunch of ULV inputs buses that hold one item stack each.\n\nYou might be tempted to dump everything into a chest and route items around to specific buses with §aItem Conduits§r. You\u0027ll probably find this to be slow, prone to jamming, and inflexible when you want to run different recipes.\n\nIf you\u0027ve unlocked §3The Empowerer§r, you might have considered §aPhantomfaces§r. These would certainly be an improvement over item conduits, but there\u0027s an even better solution.\n\nEnter §aItem Laser Relays§r: these handy tools from §bActually Additions§r allow you to create a virtual inventory out of multiple real ones; that is, you can use them to make other automation think that all of the input buses are the same inventory.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r Take this into account when placing them.\n\nTo start, place a laser on each of the input buses. Then, place the §aItem Interface§r adjacent to the laser on the first input bus. This will serve as the access point to the virtual inventory where you can connect things like an §aME Interface§r.\n\nIf you don\u0027t have enough space in a normal pattern, try using the §6Extended Processing Pattern Terminal§r!\n\nTake your §aLaser Wrench§r and right click the first laser relay, then the second laser relay, to link them together. Repeat this with the second and third relays, third and fourth relays, etc. until they have all been linked together. Now you have a laser network virtualizing all of the input buses!\n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nRemember to always use §eBlocking Mode§r when connecting the laser network to on-demand crafting. If you don\u0027t use Blocking Mode, you are likely to accidentally craft something else and jam your Assembly Line.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50159,14 +50333,14 @@ } } }, - "804:10": { + "805:10": { "preRequisites:11": [ 818 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.\n", + "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50227,7 +50401,7 @@ } } }, - "805:10": { + "806:10": { "preRequisites:11": [ 166, 226 @@ -50271,7 +50445,7 @@ } } }, - "806:10": { + "807:10": { "preRequisites:11": [ 163, 413 @@ -50334,7 +50508,7 @@ } } }, - "807:10": { + "808:10": { "preRequisiteTypes:7": [ 2 ], @@ -50376,14 +50550,14 @@ } } }, - "808:10": { + "809:10": { "preRequisites:11": [ 367 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Simulation Supercomputer§r is a multiblock structure that performs §bDeep Mob Evolution§r simulations like the §3Simulation Chamber§r, but is capable of overclocking these simulations to incredible speeds.\n\nOne of these structures can perform the equivalent work of hundreds of individual Simulation Chambers more efficiently. This will make it far easier to generate pristine matter you\u0027ll need for things like §6Dragon Lair Data§r. You\u0027ll probably need several §3Loot Fabricators§r to keep up with it.\n\nThe data model you place in the input bus will §2have a fixed 30% chance of producing Pristine matter regardless of its tier. §eOverclocking does not alter the chances of pristines§r: those come at fixed rates per iteration.\n\nAs a §dCreative Tier§r structure, it is rather expensive to make. However, it is an investment that will easily pay for itself as you progress through the endgame. You should strongly consider making one of these with your second §dHeart of a Universe§r.\n", + "desc:8": "The §3Simulation Supercomputer§r is a multiblock structure that performs §bDeep Mob Evolution§r simulations like the §3Simulation Chamber§r, but is capable of overclocking these simulations to incredible speeds.\n\nOne of these structures can perform the equivalent work of hundreds of individual Simulation Chambers more efficiently. This will make it far easier to generate pristine matter you\u0027ll need for things like §6Dragon Lair Data§r. You\u0027ll probably need several §3Loot Fabricators§r to keep up with it.\n\nThe data model you place in the input bus will §2have a fixed 30% chance of producing Pristine matter regardless of its tier. §eOverclocking does not alter the chances of pristines§r: those come at fixed rates per iteration.\n\nAs a §dCreative Tier§r structure, it is rather expensive to make. However, it is an investment that will easily pay for itself as you progress through the endgame. You should strongly consider making one of these with your second §dHeart of a Universe§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50459,7 +50633,7 @@ } } }, - "809:10": { + "810:10": { "preRequisites:11": [ 260, 278, @@ -50528,7 +50702,7 @@ } } }, - "810:10": { + "811:10": { "preRequisiteTypes:7": [ 2 ], @@ -50630,7 +50804,7 @@ } } }, - "811:10": { + "812:10": { "preRequisites:11": [ 94, 505 @@ -50665,7 +50839,7 @@ "rewards:9": {}, "tasks:9": {} }, - "812:10": { + "813:10": { "preRequisites:11": [ 4 ], @@ -50717,14 +50891,14 @@ } } }, - "813:10": { + "814:10": { "preRequisites:11": [ 21 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack!", + "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack. However, at §5EV§r, the Arc Furnace expands to 9 slots.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50801,7 +50975,7 @@ } } }, - "814:10": { + "815:10": { "preRequisites:11": [ 145 ], @@ -50867,7 +51041,7 @@ } } }, - "815:10": { + "816:10": { "preRequisites:11": [ 76, 818 @@ -50875,7 +51049,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.\n", + "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50934,7 +51108,7 @@ } } }, - "816:10": { + "817:10": { "preRequisites:11": [ 752 ], @@ -51024,7 +51198,7 @@ } } }, - "817:10": { + "818:10": { "preRequisites:11": [ 530 ], @@ -51090,7 +51264,7 @@ } } }, - "818:10": { + "819:10": { "preRequisites:11": [ 58 ], @@ -51180,7 +51354,7 @@ } } }, - "819:10": { + "820:10": { "preRequisites:11": [ 72, 78, @@ -51248,7 +51422,7 @@ } } }, - "820:10": { + "821:10": { "preRequisites:11": [ 27 ], @@ -51328,7 +51502,7 @@ } } }, - "821:10": { + "822:10": { "preRequisites:11": [ 82 ], @@ -51394,7 +51568,7 @@ } } }, - "822:10": { + "823:10": { "preRequisites:11": [ 727 ], @@ -51460,7 +51634,7 @@ } } }, - "823:10": { + "824:10": { "preRequisites:11": [ 96 ], @@ -51526,7 +51700,7 @@ } } }, - "824:10": { + "825:10": { "preRequisites:11": [ 153, 899 @@ -51593,7 +51767,7 @@ } } }, - "825:10": { + "826:10": { "preRequisites:11": [ 825 ], @@ -51677,14 +51851,15 @@ } } }, - "826:10": { + "827:10": { "preRequisites:11": [ + 65, 177 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A rudimentary version of Platinum Group Sludge (PGS) processing existed in the base pack. Here, it is a strong source of the Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum - as well as Gold. All of these elements will be used in IV-tier and above materials.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.\n\nThis is still optional, and you can get §6Ruthenium§r and §6Rhodium§r from §6Osmiridium 80/20 Ore§r and §6Iridosmine 80/20 Ore§r from Microverse adventures instead.", + "desc:8": "The §6Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum§r - are rare materials used in upcoming recipes. §6Ruthenium§r will be required now for the next tier of coils.\n\nThese materials can be obtained from ores exclusive to Microverse missions - §6Laurite Ore§r for Ruthenium, §6Cuprorhodsite Ore§r for Rhodium, and §6Osmiridium Ore§r and §6Iridosmine Ore§r for Osmium and Iridium. However, the yields of these ores from Microverse missions are small, so you should consider processing §6Platinum Group Sludge (PGS)§r for more.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51697,7 +51872,7 @@ "issilent:1": 0, "lockedprogress:1": 0, "name:8": "§2Platinum Group Processing", - "questlogic:8": "AND", + "questlogic:8": "OR", "repeat_relative:1": 1, "repeattime:3": -1, "simultaneous:1": 0, @@ -51737,26 +51912,50 @@ "Damage:2": 93, "OreDict:8": "", "id:8": "gregtech:meta_dust" - }, - "1:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 90, "OreDict:8": "", "id:8": "gregtech:meta_dust" + }, + "1:10": { + "Count:3": 1, + "Damage:2": 75, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + }, + "2:10": { + "Count:3": 1, + "Damage:2": 50, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" } }, - "taskID:8": "bq_standard:retrieval" + "taskID:8": "bq_standard:optional_retrieval" } } }, - "827:10": { + "828:10": { "preRequisites:11": [ 198 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is the highest tier of polymer. It is used in crafting Advanced SMD components, ZPM+ Machine Hulls, among other things.\n\nThis polymer requires at least 14 processing steps to craft. Good luck!", + "desc:8": "This is the highest tier of polymer. It is used in crafting §2Advanced SMD components and ZPM+ Machine Hulls,§r among other things.\n\nThis polymer can require up to §914 steps§r to create from scratch, but multiple steps are able to be skipped through distillation of various liquids. §6Check what steps you can easily skip!§r", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51815,7 +52014,7 @@ } } }, - "828:10": { + "829:10": { "preRequisites:11": [ 779 ], @@ -51881,7 +52080,7 @@ } } }, - "829:10": { + "830:10": { "preRequisites:11": [ 93, 974 @@ -51948,7 +52147,7 @@ } } }, - "830:10": { + "831:10": { "preRequisites:11": [ 830 ], @@ -52014,14 +52213,14 @@ } } }, - "831:10": { + "832:10": { "preRequisites:11": [ 830 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §opull§r fluids from the world location it is attached to, while Export will §opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.\n", + "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §opull§r fluids from the world location it is attached to, while Export will §opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52080,14 +52279,14 @@ } } }, - "832:10": { + "833:10": { "preRequisites:11": [ 830 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §a§lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §a§lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §a§lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §a§lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", + "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52158,7 +52357,7 @@ } } }, - "833:10": { + "834:10": { "preRequisites:11": [ 96 ], @@ -52224,7 +52423,7 @@ } } }, - "834:10": { + "835:10": { "preRequisites:11": [ 93, 974 @@ -52291,7 +52490,7 @@ } } }, - "835:10": { + "836:10": { "preRequisites:11": [ 147, 259 @@ -52358,7 +52557,7 @@ } } }, - "836:10": { + "837:10": { "preRequisites:11": [ 91, 836 @@ -52425,7 +52624,7 @@ } } }, - "837:10": { + "838:10": { "preRequisites:11": [ 194, 526 @@ -52433,7 +52632,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Systems on Chip can be engraved with HV power and Glowstone Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", + "desc:8": "§2Systems on Chip can be engraved with HV power and Phosphorus Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52452,7 +52651,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -52480,6 +52679,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 572, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -52492,10 +52709,10 @@ } } }, - "838:10": { + "839:10": { "preRequisites:11": [ - 904, - 882 + 882, + 904 ], "properties:10": { "betterquesting:10": { @@ -52559,16 +52776,16 @@ } } }, - "839:10": { + "840:10": { "preRequisiteTypes:7": [ + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 791, - 841, - 325 + 841 ], "properties:10": { "betterquesting:10": { @@ -52632,7 +52849,7 @@ } } }, - "840:10": { + "841:10": { "preRequisites:11": [ 312 ], @@ -52698,7 +52915,7 @@ } } }, - "841:10": { + "842:10": { "preRequisites:11": [ 242, 327 @@ -52765,7 +52982,7 @@ } } }, - "842:10": { + "843:10": { "preRequisites:11": [ 323 ], @@ -52861,7 +53078,7 @@ } } }, - "843:10": { + "844:10": { "preRequisites:11": [ 845, 847 @@ -52869,7 +53086,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.\n", + "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52928,7 +53145,7 @@ } } }, - "844:10": { + "845:10": { "preRequisites:11": [ 324, 843 @@ -52995,14 +53212,14 @@ } } }, - "845:10": { + "846:10": { "preRequisites:11": [ 844 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§6Naquadria§o§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", + "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§6Naquadria§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -53061,7 +53278,7 @@ } } }, - "846:10": { + "847:10": { "preRequisites:11": [ 324, 843 @@ -53128,7 +53345,7 @@ } } }, - "847:10": { + "848:10": { "preRequisites:11": [ 847 ], @@ -53194,14 +53411,14 @@ } } }, - "848:10": { + "849:10": { "preRequisites:11": [ 198 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6IV Assembling Machine§r is required for§2 Advanced SMD components§r.\n\nConsider upgrading to a §6Large Assembling Factory§r, which is easier to upgrade and can accept Parallel Control Hatches. ", + "desc:8": "The §6IV Assembling Machine§r is required for§2 Advanced SMD components§r.\n\nConsider upgrading to a §6Large Assembling Factory§r, which is easier to upgrade and can accept Parallel Control Hatches. The §6Large Assembing Factory§r §ccannot be recipe tier overclocked§r, as it only accepts one Energy hatch. You will need to craft higher tier standard Assembling Machines for some higher tier items.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -53278,7 +53495,7 @@ } } }, - "849:10": { + "850:10": { "preRequisites:11": [ 828, 841, @@ -53371,7 +53588,7 @@ } } }, - "850:10": { + "851:10": { "preRequisites:11": [ 312 ], @@ -53437,7 +53654,7 @@ } } }, - "851:10": { + "852:10": { "preRequisites:11": [ 677 ], @@ -53503,10 +53720,10 @@ } } }, - "852:10": { + "853:10": { "preRequisites:11": [ - 827, - 311 + 311, + 827 ], "properties:10": { "betterquesting:10": { @@ -53600,7 +53817,7 @@ } } }, - "853:10": { + "854:10": { "preRequisites:11": [ 196 ], @@ -53666,7 +53883,7 @@ } } }, - "854:10": { + "855:10": { "preRequisites:11": [ 607 ], @@ -53732,7 +53949,7 @@ } } }, - "855:10": { + "856:10": { "preRequisites:11": [ 855 ], @@ -53758,7 +53975,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -53795,10 +54012,28 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 599, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, - "856:10": { + "857:10": { "preRequisites:11": [ 339 ], @@ -53882,7 +54117,7 @@ } } }, - "857:10": { + "858:10": { "preRequisites:11": [ 255, 857 @@ -53890,7 +54125,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r, and §6Red Alloy§r has a discount from 4 redstone per alloy, to 1 and a half.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §e§eConductive Iron§r§r, and §e§eDark Steel§r§r.", + "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r, and §6Red Alloy§r has a discount from 4 redstone per alloy, to 1 and a half.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §eConductive Iron§r, and §eDark Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -53961,7 +54196,7 @@ } } }, - "858:10": { + "859:10": { "preRequisites:11": [ 198, 858 @@ -54028,7 +54263,7 @@ } } }, - "859:10": { + "860:10": { "preRequisites:11": [ 531, 826, @@ -54120,7 +54355,7 @@ } } }, - "860:10": { + "861:10": { "preRequisites:11": [ 535, 848 @@ -54193,7 +54428,7 @@ } } }, - "861:10": { + "862:10": { "preRequisites:11": [ 727 ], @@ -54259,7 +54494,7 @@ } } }, - "862:10": { + "863:10": { "preRequisites:11": [ 727 ], @@ -54325,7 +54560,7 @@ } } }, - "863:10": { + "864:10": { "preRequisites:11": [ 827 ], @@ -54391,7 +54626,7 @@ } } }, - "864:10": { + "865:10": { "preRequisites:11": [ 827 ], @@ -54457,7 +54692,7 @@ } } }, - "865:10": { + "866:10": { "preRequisites:11": [ 727 ], @@ -54523,7 +54758,7 @@ } } }, - "866:10": { + "867:10": { "preRequisites:11": [ 727 ], @@ -54589,7 +54824,7 @@ } } }, - "867:10": { + "868:10": { "preRequisites:11": [ 234 ], @@ -54655,7 +54890,7 @@ } } }, - "868:10": { + "869:10": { "preRequisites:11": [ 139 ], @@ -54721,7 +54956,7 @@ } } }, - "869:10": { + "870:10": { "preRequisites:11": [ 139 ], @@ -54787,7 +55022,7 @@ } } }, - "870:10": { + "871:10": { "preRequisites:11": [ 139 ], @@ -54853,7 +55088,7 @@ } } }, - "871:10": { + "872:10": { "preRequisites:11": [ 325 ], @@ -54919,7 +55154,7 @@ } } }, - "872:10": { + "873:10": { "preRequisites:11": [ 287 ], @@ -54985,7 +55220,7 @@ } } }, - "873:10": { + "874:10": { "preRequisites:11": [ 727 ], @@ -55051,7 +55286,7 @@ } } }, - "874:10": { + "875:10": { "preRequisites:11": [ 6 ], @@ -55117,7 +55352,7 @@ } } }, - "875:10": { + "876:10": { "preRequisites:11": [ 196 ], @@ -55183,7 +55418,7 @@ } } }, - "876:10": { + "877:10": { "preRequisites:11": [ 287 ], @@ -55249,7 +55484,7 @@ } } }, - "877:10": { + "878:10": { "preRequisites:11": [ 847 ], @@ -55315,7 +55550,7 @@ } } }, - "878:10": { + "879:10": { "preRequisites:11": [ 323 ], @@ -55381,14 +55616,14 @@ } } }, - "879:10": { + "880:10": { "preRequisites:11": [ 397 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Configurable to output any number of GT Volts and Amps.", + "desc:8": "An upgrade from the §6Creative RF Source§r, this can be configured to output any amount of GT Volts and Amps.\n\nThis can also connect to a §bLaser Network§r directly!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -55434,7 +55669,7 @@ } } }, - "880:10": { + "881:10": { "preRequisites:11": [ 153 ], @@ -55496,7 +55731,7 @@ } } }, - "881:10": { + "882:10": { "preRequisites:11": [ 325, 750 @@ -55531,7 +55766,7 @@ "rewards:9": {}, "tasks:9": {} }, - "882:10": { + "883:10": { "preRequisites:11": [ 885 ], @@ -55597,7 +55832,7 @@ } } }, - "883:10": { + "884:10": { "preRequisites:11": [ 288 ], @@ -55663,7 +55898,7 @@ } } }, - "884:10": { + "885:10": { "preRequisites:11": [ 749 ], @@ -55729,7 +55964,7 @@ } } }, - "885:10": { + "886:10": { "preRequisites:11": [ 89 ], @@ -55795,7 +56030,7 @@ } } }, - "886:10": { + "887:10": { "preRequisites:11": [ 165 ], @@ -55861,7 +56096,7 @@ } } }, - "887:10": { + "888:10": { "preRequisites:11": [ 161, 166, @@ -55929,7 +56164,7 @@ } } }, - "888:10": { + "889:10": { "preRequisites:11": [ 827 ], @@ -55963,7 +56198,7 @@ "rewards:9": {}, "tasks:9": {} }, - "889:10": { + "890:10": { "preRequisites:11": [ 56 ], @@ -56002,7 +56237,7 @@ } } }, - "890:10": { + "891:10": { "preRequisites:11": [ 94 ], @@ -56064,7 +56299,7 @@ } } }, - "891:10": { + "892:10": { "preRequisites:11": [ 541 ], @@ -56143,7 +56378,7 @@ } } }, - "892:10": { + "893:10": { "preRequisites:11": [ 3 ], @@ -56182,7 +56417,7 @@ } } }, - "893:10": { + "894:10": { "preRequisites:11": [ 147 ], @@ -56248,7 +56483,7 @@ } } }, - "894:10": { + "895:10": { "preRequisites:11": [ 88, 894 @@ -56321,7 +56556,7 @@ } } }, - "895:10": { + "896:10": { "preRequisites:11": [ 6 ], @@ -56387,15 +56622,16 @@ } } }, - "896:10": { + "897:10": { "preRequisites:11": [ + 52, 830, 896 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2With Silver, LPICs, NaK, and an HV Assembler, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.", + "desc:8": "With §6Silver, LPICs§r, §9NaK§r, and an §6HV Assembler§r, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.\n\nLook out for a new more efficient EV-tier recipe for §6Steel§r in the EBF.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -56454,7 +56690,7 @@ } } }, - "897:10": { + "898:10": { "preRequisites:11": [ 93, 891 @@ -56527,7 +56763,7 @@ } } }, - "898:10": { + "899:10": { "preRequisites:11": [ 71 ], @@ -56593,7 +56829,7 @@ } } }, - "899:10": { + "900:10": { "preRequisites:11": [ 888 ], @@ -56659,7 +56895,7 @@ } } }, - "900:10": { + "901:10": { "preRequisites:11": [ 179, 888 @@ -56694,14 +56930,14 @@ "rewards:9": {}, "tasks:9": {} }, - "901:10": { + "902:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Tablet device you get now is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, and §9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",\n", + "desc:8": "§2The Tablet device you get now is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, and §9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -56805,7 +57041,7 @@ } } }, - "902:10": { + "903:10": { "preRequisites:11": [ 59, 72 @@ -56813,7 +57049,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Cupronickel Coils§r form part of the structure of a few multiblocks. Presently, those are the §3Electric Blast Furnace§r and §3Pyrolyse Oven§r. Each tier of coil unlocks new recipes and provides various bonuses to the multiblock they are attached to.\n\nCupronickel Coils are produced in the §3Assembler§r with §62x Cupronickel Wire§r, §6Bronze Foil§r, and §9Tin Alloy fluid§r.\n\nFor now, you need 16 coils for the §3Electric Blast Furnace§r and 16 for the §3Pyrolyse Oven§r. That totals to 176 Copper, 128 Nickel, 32 Tin, and 16 Iron.", + "desc:8": "§6Cupronickel Coils§r form part of the structure of a few multiblocks. Presently, those are the §3Electric Blast Furnace§r and §3Pyrolyse Oven§r. Each tier of coil unlocks new recipes and provides various bonuses to the multiblock they are attached to.\n\nCupronickel Coils are produced in the §3Assembler§r with §62x Cupronickel Wire§r, §6Bronze Foil§r, and §9Tin Alloy Fluid§r.\n\nFor now, you need 16 coils for the §3Electric Blast Furnace§r and 16 for the §3Pyrolyse Oven§r. That totals to §6176 Copper§r, §6128 Nickel§r, §632 Tin§r, and §616 Iron§r.\n\nHave fun mining!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -56872,7 +57108,7 @@ } } }, - "903:10": { + "904:10": { "preRequisites:11": [ 339, 914 @@ -56939,7 +57175,7 @@ } } }, - "904:10": { + "905:10": { "preRequisites:11": [ 904 ], @@ -57005,14 +57241,14 @@ } } }, - "905:10": { + "906:10": { "preRequisites:11": [ 535 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily.", + "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily. \n\nNote that like the Large Assembling Machine, the Large Circuit Assembler §ccannot use more than one Energy Hatch§2, preventing it from recipe tier overclocking.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -57095,7 +57331,7 @@ } } }, - "906:10": { + "907:10": { "preRequisites:11": [ 533, 906 @@ -57130,7 +57366,7 @@ "rewards:9": {}, "tasks:9": {} }, - "907:10": { + "908:10": { "preRequisites:11": [ 196 ], @@ -57164,7 +57400,7 @@ "rewards:9": {}, "tasks:9": {} }, - "908:10": { + "909:10": { "preRequisiteTypes:7": [ 2 ], @@ -57245,7 +57481,7 @@ } } }, - "909:10": { + "910:10": { "preRequisites:11": [ 527, 827 @@ -57312,7 +57548,7 @@ } } }, - "910:10": { + "911:10": { "preRequisites:11": [ 38 ], @@ -57378,14 +57614,14 @@ } } }, - "911:10": { + "912:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §2CEu§r§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDME§r for easy infinite resources\n- §6Nomicoins§r don\u0027t exist\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", + "desc:8": "The §2CEu§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDME§r for easy infinite resources\n- §6Nomicoins§r don\u0027t exist\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -57417,7 +57653,7 @@ } } }, - "912:10": { + "913:10": { "preRequisites:11": [ 401 ], @@ -57456,7 +57692,7 @@ } } }, - "913:10": { + "914:10": { "preRequisites:11": [ 255, 286, @@ -57526,7 +57762,7 @@ } } }, - "914:10": { + "915:10": { "preRequisites:11": [ 828 ], @@ -57560,7 +57796,7 @@ "rewards:9": {}, "tasks:9": {} }, - "915:10": { + "916:10": { "preRequisites:11": [ 253 ], @@ -57594,7 +57830,7 @@ "rewards:9": {}, "tasks:9": {} }, - "916:10": { + "917:10": { "preRequisites:11": [ 524 ], @@ -57628,11 +57864,11 @@ "rewards:9": {}, "tasks:9": {} }, - "917:10": { + "918:10": { "preRequisites:11": [ - 729, + 100, 494, - 100 + 729 ], "properties:10": { "betterquesting:10": { @@ -57696,7 +57932,7 @@ } } }, - "918:10": { + "919:10": { "preRequisites:11": [ 108 ], @@ -57762,7 +57998,7 @@ } } }, - "919:10": { + "920:10": { "preRequisites:11": [ 279 ], @@ -57796,7 +58032,7 @@ "rewards:9": {}, "tasks:9": {} }, - "920:10": { + "921:10": { "preRequisiteTypes:7": [ 2 ], @@ -57838,7 +58074,7 @@ } } }, - "921:10": { + "922:10": { "preRequisites:11": [ 885 ], @@ -57904,7 +58140,7 @@ } } }, - "922:10": { + "923:10": { "preRequisiteTypes:7": [ 2 ], @@ -57946,15 +58182,15 @@ } } }, - "923:10": { + "924:10": { "preRequisites:11": [ - 971, - 728 + 728, + 971 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Alloy Smelter at voltage §lLV§r§o or higher.§r\n\nThe final step. Combine §6Pulsating Dust§r and §6Resonant Clathrate§r to make §6Pulsating Polymer Clay§r. \n\nTake note that a §3§3Chemical Reactor§r making §6Resonant Clathrate§r will supply 1 §3Alloy Smelter§r of the same tier, and that one §bMV §3Alloy Smelter§r making §6Pulsating Polymer Clay§r supports 10.03 §3Simulation Chambers§r, with each higher tier doubling the amount of §3Simulation Chambers§r it supports.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Alloy Smelter at voltage §lLV§o or higher.§r\n\nThe final step. Combine §6Pulsating Dust§r and §6Resonant Clathrate§r to make §6Pulsating Polymer Clay§r. \n\nTake note that a §3Chemical Reactor§r making §6Resonant Clathrate§r will supply 1 §3Alloy Smelter§r of the same tier, and that one §bMV §3Alloy Smelter§r making §6Pulsating Polymer Clay§r supports 10.03 §3Simulation Chambers§r, with each higher tier doubling the amount of §3Simulation Chambers§r it supports.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58004,16 +58240,16 @@ } } }, - "924:10": { + "925:10": { "preRequisites:11": [ - 930, + 728, 927, - 728 + 930 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§r§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58063,16 +58299,16 @@ } } }, - "925:10": { + "926:10": { "preRequisites:11": [ + 728, 933, - 934, - 728 + 934 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lMV§r§o or higher.§r\n\nCombine your §6Quartz§r and §6Resonant Ender§r to make §6Resonant Clathrate§r. One §3Electrolyser§r making §6Quartz§r supports one §3Chemical Reactor §rof the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lMV§o or higher.§r\n\nCombine your §6Quartz§r and §6Resonant Ender§r to make §6Resonant Clathrate§r. One §3Electrolyser§r making §6Quartz§r supports one §3Chemical Reactor §rof the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58122,15 +58358,15 @@ } } }, - "926:10": { + "927:10": { "preRequisites:11": [ - 928, - 728 + 728, + 928 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58180,15 +58416,15 @@ } } }, - "927:10": { + "928:10": { "preRequisites:11": [ - 929, - 728 + 728, + 929 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58238,15 +58474,15 @@ } } }, - "928:10": { + "929:10": { "preRequisites:11": [ - 931, - 728 + 728, + 931 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58296,12 +58532,12 @@ } } }, - "929:10": { + "930:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58351,7 +58587,7 @@ } } }, - "930:10": { + "931:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -58406,15 +58642,15 @@ } } }, - "931:10": { + "932:10": { "preRequisites:11": [ - 928, - 728 + 728, + 928 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§r§o or higher, or an Arc Furnace at voltage §lLV§r§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§o or higher, or an Arc Furnace at voltage §lLV§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58464,15 +58700,15 @@ } } }, - "932:10": { + "933:10": { "preRequisites:11": [ - 932, - 728 + 728, + 932 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58522,15 +58758,15 @@ } } }, - "933:10": { + "934:10": { "preRequisites:11": [ - 935, - 728 + 728, + 935 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires an Extractor of tier §lLV§r§o or higher.§r\n\nMelt your §6Ender Pearls§r into §6Resonant Ender§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires an Extractor of tier §lLV§o or higher.§r\n\nMelt your §6Ender Pearls§r into §6Resonant Ender§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58584,7 +58820,7 @@ } } }, - "934:10": { + "935:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -58639,15 +58875,15 @@ } } }, - "935:10": { + "936:10": { "preRequisites:11": [ - 926, - 728 + 728, + 926 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§r§o or higher.§r§r§r\n\nSmelt your §6Resonant Clathrate§r into §6Pulsating Dust§r. If you\u0027re using a §3Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. You might want to keep it as a §3Electric Furnace§r, depending on your circumstance. \n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§o or higher.§r\n\nSmelt your §6Resonant Clathrate§r into §6Pulsating Dust§r. If you\u0027re using a §3Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. You might want to keep it as a §3Electric Furnace§r, depending on your circumstance. \n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58697,7 +58933,7 @@ } } }, - "936:10": { + "937:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -58752,14 +58988,14 @@ } } }, - "937:10": { + "938:10": { "preRequisites:11": [ 937 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Gravel.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Gravel.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58809,14 +59045,14 @@ } } }, - "938:10": { + "939:10": { "preRequisites:11": [ 938 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Sand.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sand.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58866,14 +59102,14 @@ } } }, - "939:10": { + "940:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Dust.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r. Used for nothing, apart from turning into §6Clay§r and §6Netherrack§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Dust.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r. Used for nothing, apart from turning into §6Clay§r and §6Netherrack§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58923,7 +59159,7 @@ } } }, - "940:10": { + "941:10": { "preRequisites:11": [ 940, 942 @@ -58931,7 +59167,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Clay.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§r§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r Turns into many useful resources.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Clay.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r Turns into many useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58981,12 +59217,12 @@ } } }, - "941:10": { + "942:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Water.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\nIn this case, you\u0027ll need §9Water§r for §6Clay§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Water.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\nIn this case, you\u0027ll need §9Water§r for §6Clay§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59032,12 +59268,12 @@ } } }, - "942:10": { + "943:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Lava.§r\n\n§6Lava§r can be achieved in three main ways. The first is using a §3Chemical Reactor§r to turn §6Magma Blocks§r into §6Lava§r. The second is using §bActually Additions §6Lava Factories§r. These are quite slow. The final notable way is using a §bGregTech §6Fluid Drill§r in the Nether above a §6Lava§r vein.\n\nIn this case, you\u0027ll need §6Lava§r for §6Netherrack§r. You won\u0027t need much, although §6Lava§r can also be centrifuged for useful resources, and will be used heavily in the End Game for §6Lava Infused Crystals§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Lava.§r\n\n§6Lava§r can be achieved in three main ways. The first is using a §3Chemical Reactor§r to turn §6Magma Blocks§r into §6Lava§r. The second is using §bActually Additions §6Lava Factories§r. These are quite slow. The final notable way is using a §bGregTech §6Fluid Drill§r in the Nether above a §6Lava§r vein.\n\nIn this case, you\u0027ll need §6Lava§r for §6Netherrack§r. You won\u0027t need much, although §6Lava§r can also be centrifuged for useful resources, and will be used heavily in the End Game for §6Lava Infused Crystals§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59083,7 +59319,7 @@ } } }, - "943:10": { + "944:10": { "preRequisites:11": [ 940, 943 @@ -59091,7 +59327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Netherrack.\n\nThis step requires a Chemical Reactor at voltage §lLV§r§o or higher.§r\n\nCombine your §6Dust§r and §6Lava§r into §6Netherrack§r. Pretty much used for nothing, apart from your first §6Hellish Matter§r and §6Netherrack Dust§r. No need to passive this.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Netherrack.\n\nThis step requires a Chemical Reactor at voltage §lLV§o or higher.§r\n\nCombine your §6Dust§r and §6Lava§r into §6Netherrack§r. Pretty much used for nothing, apart from your first §6Hellish Matter§r and §6Netherrack Dust§r. No need to passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59141,14 +59377,14 @@ } } }, - "944:10": { + "945:10": { "preRequisites:11": [ 944 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Netherrack Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Netherrack§r into §6Netherrack Dust§r. Used for nothing apart from §6Nether Cakes§r. No need to passive this.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Netherrack Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Netherrack§r into §6Netherrack Dust§r. Used for nothing apart from §6Nether Cakes§r. No need to passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59198,14 +59434,14 @@ } } }, - "945:10": { + "946:10": { "preRequisites:11": [ 941 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Balls.§r\n\nCraft your §6Clay§r to make §6Clay Balls§r.§r You can also use §3Compacting Drawers§r. Used for §6Conduit Binders§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Balls.§r\n\nCraft your §6Clay§r to make §6Clay Balls§r.§r You can also use §3Compacting Drawers§r. Used for §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59255,14 +59491,14 @@ } } }, - "946:10": { + "947:10": { "preRequisites:11": [ 941 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Clay§r to make §6Clay Dust§r.§r Turns into many useful resources.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Clay§r to make §6Clay Dust§r.§r Turns into many useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59312,14 +59548,14 @@ } } }, - "947:10": { + "948:10": { "preRequisites:11": [ 947 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Sodium, Silicon, Lithium and Aluminium.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nSplit your §6Clay Dust§r to make §6Sodium Dust§r, §6Silicon Dust§r, §6Lithium Dust§r, and §6Aluminium Dust§r.§r This is extremely important to passive, as you will need a lot of these resources, and this is the best way to get them.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sodium, Silicon, Lithium and Aluminium.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nSplit your §6Clay Dust§r to make §6Sodium Dust§r, §6Silicon Dust§r, §6Lithium Dust§r, and §6Aluminium Dust§r.§r This is extremely important to passive, as you will need a lot of these resources, and this is the best way to get them.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 0, @@ -59387,14 +59623,14 @@ } } }, - "948:10": { + "949:10": { "preRequisites:11": [ 937 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Stone.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§r§o or higher.§r\n\nMainly used for decorational blocks. Still part of §eCobbleworks§r I guess.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Stone.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§o or higher.§r\n\nMainly used for decorational blocks. Still part of §eCobbleworks§r I guess.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59444,14 +59680,14 @@ } } }, - "949:10": { + "950:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Glass.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§r§o or higher, or an Arc Furnace at voltage §lLV§r§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Glass.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§o or higher, or an Arc Furnace at voltage §lLV§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59501,14 +59737,14 @@ } } }, - "950:10": { + "951:10": { "preRequisites:11": [ 950 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or achieving Quartz.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier. You will need a lot of §6Quartz§r, so its crucial that you passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or achieving Quartz.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier. You will need a lot of §6Quartz§r, so its crucial that you passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59558,16 +59794,16 @@ } } }, - "951:10": { + "952:10": { "preRequisites:11": [ - 757, + 150, 174, - 150 + 757 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Ender Air§r, collected from a §3Gas Collector§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Ender Air§r.\n\n§9Liquid Ender Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Nether Air give different useful components too.\n", + "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Ender Air§r, collected from a §3Gas Collector§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Ender Air§r.\n\n§9Liquid Ender Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Nether Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59626,16 +59862,16 @@ } } }, - "952:10": { + "953:10": { "preRequisites:11": [ - 780, 150, - 174 + 174, + 780 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Nether Air§r, collected from §3Gas Collectors§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Nether Air§r.\n\n§9Liquid Nether Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Ender Air give different useful components too.\n", + "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Nether Air§r, collected from §3Gas Collectors§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Nether Air§r.\n\n§9Liquid Nether Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Ender Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59694,7 +59930,7 @@ } } }, - "953:10": { + "954:10": { "preRequisites:11": [ 263, 267 @@ -59729,7 +59965,7 @@ "rewards:9": {}, "tasks:9": {} }, - "954:10": { + "955:10": { "preRequisites:11": [ 539 ], @@ -59763,7 +59999,7 @@ "rewards:9": {}, "tasks:9": {} }, - "955:10": { + "956:10": { "preRequisites:11": [ 328 ], @@ -59797,14 +60033,14 @@ "rewards:9": {}, "tasks:9": {} }, - "956:10": { + "957:10": { "preRequisites:11": [ 950 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Glass Dust.\n\nThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Glass§r into §6Glass Dust§r. Used for nothing, apart from §6Silicon Dioxide Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Glass Dust.\n\nThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Glass§r into §6Glass Dust§r. Used for nothing, apart from §6Silicon Dioxide Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59854,14 +60090,14 @@ } } }, - "957:10": { + "958:10": { "preRequisites:11": [ 957 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Silicon Dioxide Dust.\n\nThis step requires a Centrifuge at voltage §lLV§r§o or higher.§r\n\nSeperate your §6Glass Dust§r into §6Silicon Dioxide Dust§r. Can be electrolysed into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Silicon Dioxide Dust.\n\nThis step requires a Centrifuge at voltage §lLV§o or higher.§r\n\nSeperate your §6Glass Dust§r into §6Silicon Dioxide Dust§r. Can be electrolysed into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59911,14 +60147,14 @@ } } }, - "958:10": { + "959:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Quartz Sand.\n\nThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Sand§r into §6Quartz Sand§r. Can be electrolysed into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Quartz Sand.\n\nThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Sand§r into §6Quartz Sand§r. Can be centrifuged into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59968,14 +60204,14 @@ } } }, - "959:10": { + "960:10": { "preRequisites:11": [ 959 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Sand.\n\nThis step requires a Centrifuge at voltage §lLV§r§o or higher.§r\n\nSeperate your §6Quartz Sand§r into §6Quartzite Dust§r and §6Certus Quartz Dust§r. This is a good renewable source of §6Certus Quartz§r, which you need for §bApplied Energistics 2§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sand.\n\nThis step requires a Centrifuge at voltage §lLV§o or higher.§r\n\nSeperate your §6Quartz Sand§r into §6Quartzite Dust§r and §6Certus Quartz Dust§r. This is a good renewable source of §6Certus Quartz§r, which you need for §bApplied Energistics 2§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60031,14 +60267,14 @@ } } }, - "960:10": { + "961:10": { "preRequisites:11": [ 958 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Oxygen.\n\nThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nSplit your §6Silicon Dioxide Dust§r into §6Silicon Dust and Oxygen§r. This is the best source of Early Game §6Oxygen§r, although distilling §6Liquid Air§r may be better later, depending on your situation.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Oxygen.\n\nThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nSplit your §6Silicon Dioxide Dust§r into §6Silicon Dust and Oxygen§r. This is the best source of Early Game §6Oxygen§r, although distilling §6Liquid Air§r may be better later, depending on your situation.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60084,7 +60320,7 @@ } } }, - "961:10": { + "962:10": { "preRequisites:11": [ 260 ], @@ -60154,14 +60390,14 @@ } } }, - "962:10": { + "963:10": { "preRequisites:11": [ 943 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or achieving Obsidian.§r\n\n§oThis step requires a Fluid Solidifier at voltage §lLV§r§o or higher, or a Rock Breaker at voltage §lHV§r§o or higher.§r\n\nCool down your §6Lava§r into §6Obsidian§r. You\u0027ll need a lot of this, so it\u0027s probably wise to use §3Rock Breakers§r once you hit §6HV§r, as they don\u0027t consume anything to produce §6Obsidian§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or achieving Obsidian.§r\n\n§oThis step requires a Fluid Solidifier at voltage §lLV§o or higher, or a Rock Breaker at voltage §lHV§o or higher.§r\n\nCool down your §6Lava§r into §6Obsidian§r. You\u0027ll need a lot of this, so it\u0027s probably wise to use §3Rock Breakers§r once you hit §6HV§r, as they don\u0027t consume anything to produce §6Obsidian§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60211,14 +60447,14 @@ } } }, - "963:10": { + "964:10": { "preRequisites:11": [ 963 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Obsidian Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Obsidian§r into §6Obsidian Dust§r. You\u0027ll need a lot of this for §6Petrotheum Dust§r.\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Obsidian Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Obsidian§r into §6Obsidian Dust§r. You\u0027ll need a lot of this for §6Petrotheum Dust§r.\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60268,14 +60504,14 @@ } } }, - "964:10": { + "965:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Sandstone.§r\n\nCompact your §6Sand§r into §6Sandstone§r. It is recommended to use §3Mechanical Crafters§r or §6Compacting Drawers§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sandstone.§r\n\nCompact your §6Sand§r into §6Sandstone§r. It is recommended to use §3Mechanical Crafters§r or §6Compacting Drawers§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60325,14 +60561,14 @@ } } }, - "965:10": { + "966:10": { "preRequisites:11": [ 965 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Saltpeter.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sandstone§r into §6Saltpeter§r. This is probably the best way to get §6Saltpeter§r, which you\u0027ll need a lot for §6Aerotheum Dust§r. You can also get §6Saltpeter§r from §bDeep Mob Evolution§r.\n\nYou can also electrolyse it for §6Potassium§r, although it isn\u0027t recommended because of how easily you can get §6Potassium§r, such as from §6Black Granite §3Processing§r, and how much §6Saltpeter§r it costs.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Saltpeter.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nBreak up your §6Sandstone§r into §6Saltpeter§r. This is probably the best way to get §6Saltpeter§r, which you\u0027ll need a lot for §6Aerotheum Dust§r. You can also get §6Saltpeter§r from §bDeep Mob Evolution§r.\n\nYou can also electrolyse it for §6Potassium§r, although it isn\u0027t recommended because of how easily you can get §6Potassium§r, such as from §6Black Granite §3Processing§r, and how much §6Saltpeter§r it costs.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60382,14 +60618,14 @@ } } }, - "966:10": { + "967:10": { "preRequisites:11": [ 104 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6§6§6Interfaces§r§r§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.\n\n", + "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6Interfaces§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60421,14 +60657,14 @@ } } }, - "967:10": { + "968:10": { "preRequisites:11": [ 938 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Flint.§r\n\n§oThis step requires a Sifter at voltage §lLV§r§o or higher.§r\n\nSearch your §6Gravel§r for §6Flint§r. The only main thing you\u0027ll need this for is §6Storage Downgrades§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Flint.§r\n\n§oThis step requires a Sifter at voltage §lLV§o or higher.§r\n\nSearch your §6Gravel§r for §6Flint§r. The only main thing you\u0027ll need this for is §6Storage Downgrades§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60478,14 +60714,14 @@ } } }, - "968:10": { + "969:10": { "preRequisites:11": [ 937 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Stone Dust.\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Cobblestone§r into §6Stone Dust§r. You\u0027ll actually get a lot of §6Stone Dust§r from §eOre Processing§r, but this could be your backup source. You\u0027ll need this for §6Concrete§r. You can also centrifuge this, although the resources gained are not very useful, and are in very small amounts.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Stone Dust.\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Cobblestone§r into §6Stone Dust§r. You\u0027ll actually get a lot of §6Stone Dust§r from §eOre Processing§r, but this could be your backup source. You\u0027ll need this for §6Concrete§r. You can also centrifuge this, although the resources gained are not very useful, and are in very small amounts.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60535,7 +60771,7 @@ } } }, - "969:10": { + "970:10": { "preRequisites:11": [ 947, 969 @@ -60543,7 +60779,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Concrete.\n\n§oThis step requires a Mixer at voltage §lLV§r§o or higher.§r\n\nMix §6Stone Dust§r, §6Clay Dust§r and some §9Water§r to make §6Concrete§r. This is probably the easiest way to get §6Concrete§r. You\u0027ll need this for §6Plascrete§r, used in §2Cleanrooms§r, and a tiny amount for §6Launch Pads§r.§o\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Concrete.\n\n§oThis step requires a Mixer at voltage §lLV§o or higher.§r\n\nMix §6Stone Dust§r, §6Clay Dust§r and some §9Water§r to make §6Concrete§r. This is probably the easiest way to get §6Concrete§r. You\u0027ll need this for §6Plascrete§r, used in §2Cleanrooms§r, and a tiny amount for §6Launch Pads§r.§o\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60593,10 +60829,10 @@ } } }, - "970:10": { + "971:10": { "preRequisites:11": [ - 936, - 925 + 925, + 936 ], "properties:10": { "betterquesting:10": { @@ -60628,7 +60864,7 @@ "rewards:9": {}, "tasks:9": {} }, - "971:10": { + "972:10": { "preRequisites:11": [ 95 ], @@ -60685,12 +60921,12 @@ } } }, - "972:10": { + "973:10": { "preRequisites:11": [ 227, - 810, 504, - 546 + 546, + 810 ], "properties:10": { "betterquesting:10": { @@ -60722,7 +60958,7 @@ "rewards:9": {}, "tasks:9": {} }, - "973:10": { + "974:10": { "preRequisites:11": [ 89 ], @@ -60756,7 +60992,7 @@ "rewards:9": {}, "tasks:9": {} }, - "974:10": { + "975:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60788,7 +61024,7 @@ "rewards:9": {}, "tasks:9": {} }, - "975:10": { + "976:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60820,7 +61056,7 @@ "rewards:9": {}, "tasks:9": {} }, - "976:10": { + "977:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60852,7 +61088,7 @@ "rewards:9": {}, "tasks:9": {} }, - "977:10": { + "978:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60884,7 +61120,7 @@ "rewards:9": {}, "tasks:9": {} }, - "978:10": { + "979:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60916,7 +61152,7 @@ "rewards:9": {}, "tasks:9": {} }, - "979:10": { + "980:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60948,7 +61184,7 @@ "rewards:9": {}, "tasks:9": {} }, - "980:10": { + "981:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60980,7 +61216,7 @@ "rewards:9": {}, "tasks:9": {} }, - "981:10": { + "982:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61012,7 +61248,7 @@ "rewards:9": {}, "tasks:9": {} }, - "982:10": { + "983:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61044,7 +61280,7 @@ "rewards:9": {}, "tasks:9": {} }, - "983:10": { + "984:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61076,7 +61312,7 @@ "rewards:9": {}, "tasks:9": {} }, - "984:10": { + "985:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61108,7 +61344,7 @@ "rewards:9": {}, "tasks:9": {} }, - "985:10": { + "986:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61140,7 +61376,7 @@ "rewards:9": {}, "tasks:9": {} }, - "986:10": { + "987:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61172,7 +61408,7 @@ "rewards:9": {}, "tasks:9": {} }, - "987:10": { + "988:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61204,7 +61440,7 @@ "rewards:9": {}, "tasks:9": {} }, - "988:10": { + "989:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61236,7 +61472,7 @@ "rewards:9": {}, "tasks:9": {} }, - "989:10": { + "990:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61268,7 +61504,7 @@ "rewards:9": {}, "tasks:9": {} }, - "990:10": { + "991:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61304,7 +61540,7 @@ "rewards:9": {}, "tasks:9": {} }, - "991:10": { + "992:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61336,7 +61572,7 @@ "rewards:9": {}, "tasks:9": {} }, - "992:10": { + "993:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61368,7 +61604,7 @@ "rewards:9": {}, "tasks:9": {} }, - "993:10": { + "994:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61400,7 +61636,7 @@ "rewards:9": {}, "tasks:9": {} }, - "994:10": { + "995:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61436,7 +61672,7 @@ "rewards:9": {}, "tasks:9": {} }, - "995:10": { + "996:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61468,7 +61704,7 @@ "rewards:9": {}, "tasks:9": {} }, - "996:10": { + "997:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61500,10 +61736,10 @@ "rewards:9": {}, "tasks:9": {} }, - "997:10": { + "998:10": { "preRequisites:11": [ - 1002, - 825 + 825, + 1002 ], "properties:10": { "betterquesting:10": { @@ -61558,10 +61794,10 @@ } } }, - "998:10": { + "999:10": { "preRequisites:11": [ - 998, - 825 + 825, + 998 ], "properties:10": { "betterquesting:10": { @@ -61612,10 +61848,10 @@ } } }, - "999:10": { + "1000:10": { "preRequisites:11": [ - 408, - 106 + 106, + 408 ], "properties:10": { "betterquesting:10": { @@ -61679,7 +61915,7 @@ } } }, - "1000:10": { + "1001:10": { "preRequisites:11": [ 109 ], @@ -61745,10 +61981,10 @@ } } }, - "1001:10": { + "1002:10": { "preRequisites:11": [ - 1010, - 825 + 825, + 1010 ], "properties:10": { "betterquesting:10": { @@ -61803,10 +62039,10 @@ } } }, - "1002:10": { + "1003:10": { "preRequisites:11": [ - 1012, - 825 + 825, + 1012 ], "properties:10": { "betterquesting:10": { @@ -61861,10 +62097,10 @@ } } }, - "1003:10": { + "1004:10": { "preRequisites:11": [ - 1011, - 825 + 825, + 1011 ], "properties:10": { "betterquesting:10": { @@ -61919,7 +62155,7 @@ } } }, - "1004:10": { + "1005:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61974,7 +62210,7 @@ } } }, - "1005:10": { + "1006:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -62029,7 +62265,7 @@ } } }, - "1006:10": { + "1007:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -62084,7 +62320,7 @@ } } }, - "1007:10": { + "1008:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -62139,11 +62375,11 @@ } } }, - "1008:10": { + "1009:10": { "preRequisites:11": [ + 825, 1002, - 1003, - 825 + 1003 ], "properties:10": { "betterquesting:10": { @@ -62198,7 +62434,7 @@ } } }, - "1009:10": { + "1010:10": { "preRequisites:11": [ 1003, 1004 @@ -62233,10 +62469,10 @@ "rewards:9": {}, "tasks:9": {} }, - "1010:10": { + "1011:10": { "preRequisites:11": [ - 1006, - 1005 + 1005, + 1006 ], "properties:10": { "betterquesting:10": { @@ -62268,7 +62504,7 @@ "rewards:9": {}, "tasks:9": {} }, - "1011:10": { + "1012:10": { "preRequisites:11": [ 1007, 1008 @@ -62303,7 +62539,7 @@ "rewards:9": {}, "tasks:9": {} }, - "1012:10": { + "1013:10": { "preRequisites:11": [ 93 ], @@ -62369,7 +62605,7 @@ } } }, - "1013:10": { + "1014:10": { "preRequisites:11": [ 339 ], @@ -62435,7 +62671,7 @@ } } }, - "1014:10": { + "1015:10": { "preRequisiteTypes:7": [ 2 ], @@ -62513,13 +62749,13 @@ } } }, - "1015:10": { + "1016:10": { "preRequisites:11": [ - 62, - 230, - 148, 54, - 132 + 62, + 132, + 148, + 230 ], "properties:10": { "betterquesting:10": { @@ -62597,11 +62833,11 @@ } } }, - "1016:10": { + "1017:10": { "preRequisites:11": [ - 1016, + 120, 391, - 120 + 1016 ], "properties:10": { "betterquesting:10": { @@ -62683,7 +62919,7 @@ } } }, - "1017:10": { + "1018:10": { "preRequisites:11": [ 282 ], @@ -62749,15 +62985,15 @@ } } }, - "1018:10": { + "1019:10": { "preRequisites:11": [ - 295, - 107 + 107, + 295 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this. ", + "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -62840,7 +63076,7 @@ } } }, - "1019:10": { + "1020:10": { "preRequisites:11": [ 4 ], @@ -62912,7 +63148,7 @@ } } }, - "1020:10": { + "1021:10": { "preRequisites:11": [ 4 ], @@ -62978,15 +63214,15 @@ } } }, - "1021:10": { + "1022:10": { "preRequisites:11": [ - 100, - 98 + 98, + 100 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: This quest accepts both Memory Cards, and Advanced Memory Cards.§r\n\nA §6P2P Tunnel§r (§aPoint-to-Point Tunnel§r) is a powerful tool from §bApplied Energistics 2§r that can be used to send items, redstone, RF/EU or fluids from one location to another, using your ME system, without the need to use any disk storage space. §cTransporting RF/EU has a 5% tax on the input energy.§r\n\nEach P2P tunnel system may have only §cone input§r but §eany number of outputs§r. There is no limit on how many P2P tunnels, or P2P tunnel systems, you can have on one network.\n\nBy default, a P2P tunnel is an §6ME tunnel§r, which transmits Applied Energistics channels and power. Since channels are disabled, you will most likely not be using the default tunnel. You can change the mode of your P2P tunnels by right clicking the tunnel with the respective item seen in §bJEI§r.\n\nTo configure your P2P tunnels, take a §6Memory Card§r. While holding the memory card, §ashift-right click§r the unconfigured tunnel, to set the frequency of the input, and save the frequency to the memory card. Once the first tunnel has been set up this way and the memory card is configured with the frequency, any subsequent tunnel you §aright-click§r with the memory card will be set as the output of the most recent frequency used.\n\nYou can also use memory cards to copy the configuration of ME blocks and tile-entities, such as §6Interfaces§r and §6Storage Buses§r. §aShift-right click§r a ME block to copy its configuration, and §aright-click§r to paste that configuration. Note that this doesn\u0027t copy upgrades applied to the block.\n\nYou can also §ashift-right click§r to empty the frequency, or the ME block configuration, set in the card.\n\nThis pack has §bBetter P2P§r, which adds the §6Advanced Memory Card§r. Using it, you can §aright-click§r on any ME device or cable that is attached to the current system. This will allow you to see all your current P2P connections without having to search for your tunnels.\n\nYou can also configure P2P tunnels using your Advanced Memory Card. While holding the card, §aright-click§r on a tunnel, it will be §aselected§r. Once a tunnel is selected, it will be highlighted in §agreen§r. You can also see your other connections with the options to select or bind; hitting select will reselect the tunnel.\n\nAn incorrect setup will show in §cred§r (Usually P2P device without input).\n\nThe §6Advanced Memory Card§r has 3 modes accessible in the §3GUI§r:\n\n§aBind Output§r:\nOnce the tunnel you would like to be set as an input has been §aselected§r, hitting §bbind§r on any other connection will turn the selected tunnel into an input tunnel, and any binded tunnels will be turned into output tunnels for the selected tunnel.\n\n§aBind Input§r:\nOnce the tunnel you would like to be set as an output has been §aselected§r, hitting §bbind§r on any other tunnel will set the tunnel as the input of the selected tunnel. This is useful for when you can’t find the output tunnel.\n \n§aCopy Output§r:\nOnce an output tunnel you want to copy has been §aselected§r, hitting §bbind§r on any other connection will copy the output frequency of the selected tunnel.\n", + "desc:8": "§oNote: This quest accepts both Memory Cards, and Advanced Memory Cards.§r\n\nA §6P2P Tunnel§r (§aPoint-to-Point Tunnel§r) is a powerful tool from §bApplied Energistics 2§r that can be used to send items, redstone, RF/EU or fluids from one location to another, using your ME system, without the need to use any disk storage space. §cTransporting RF/EU has a 5% tax on the input energy.§r\n\nEach P2P tunnel system may have only §cone input§r but §eany number of outputs§r. There is no limit on how many P2P tunnels, or P2P tunnel systems, you can have on one network.\n\nBy default, a P2P tunnel is an §6ME tunnel§r, which transmits Applied Energistics channels and power. Since channels are disabled, you will most likely not be using the default tunnel. You can change the mode of your P2P tunnels by right clicking the tunnel with the respective item seen in §bJEI§r.\n\nTo configure your P2P tunnels, take a §6Memory Card§r. While holding the memory card, §ashift-right click§r the unconfigured tunnel, to set the frequency of the input, and save the frequency to the memory card. Once the first tunnel has been set up this way and the memory card is configured with the frequency, any subsequent tunnel you §aright-click§r with the memory card will be set as the output of the most recent frequency used.\n\nYou can also use memory cards to copy the configuration of ME blocks and tile-entities, such as §6Interfaces§r and §6Storage Buses§r. §aShift-right click§r a ME block to copy its configuration, and §aright-click§r to paste that configuration. Note that this doesn\u0027t copy upgrades applied to the block.\n\nYou can also §ashift-right click§r to empty the frequency, or the ME block configuration, set in the card.\n\nThis pack has §bBetter P2P§r, which adds the §6Advanced Memory Card§r. Using it, you can §aright-click§r on any ME device or cable that is attached to the current system. This will allow you to see all your current P2P connections without having to search for your tunnels.\n\nYou can also configure P2P tunnels using your Advanced Memory Card. While holding the card, §aright-click§r on a tunnel, it will be §aselected§r. Once a tunnel is selected, it will be highlighted in §agreen§r. You can also see your other connections with the options to select or bind; hitting select will reselect the tunnel.\n\nAn incorrect setup will show in §cred§r (Usually P2P device without input).\n\nThe §6Advanced Memory Card§r has 3 modes accessible in the §3GUI§r:\n\n§aBind Output§r:\nOnce the tunnel you would like to be set as an input has been §aselected§r, hitting §bbind§r on any other connection will turn the selected tunnel into an input tunnel, and any binded tunnels will be turned into output tunnels for the selected tunnel.\n\n§aBind Input§r:\nOnce the tunnel you would like to be set as an output has been §aselected§r, hitting §bbind§r on any other tunnel will set the tunnel as the input of the selected tunnel. This is useful for when you can’t find the output tunnel.\n \n§aCopy Output§r:\nOnce an output tunnel you want to copy has been §aselected§r, hitting §bbind§r on any other connection will copy the output frequency of the selected tunnel.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -63055,14 +63291,14 @@ } } }, - "1022:10": { + "1023:10": { "preRequisiteTypes:7": [ - 2, - 0 + 0, + 2 ], "preRequisites:11": [ - 808, - 604 + 604, + 808 ], "properties:10": { "betterquesting:10": { @@ -63303,7 +63539,7 @@ } } }, - "1023:10": { + "1024:10": { "preRequisiteTypes:7": [ 2 ], @@ -63345,7 +63581,7 @@ } } }, - "1024:10": { + "1025:10": { "preRequisites:11": [ 542 ], @@ -63411,10 +63647,10 @@ } } }, - "1025:10": { + "1026:10": { "preRequisites:11": [ - 56, - 53 + 53, + 56 ], "properties:10": { "betterquesting:10": { @@ -63470,14 +63706,14 @@ } } }, - "1026:10": { + "1027:10": { "preRequisites:11": [ 967 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionalidy it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", + "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionality it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -63536,7 +63772,7 @@ } } }, - "1027:10": { + "1028:10": { "preRequisites:11": [ 132 ], @@ -63613,7 +63849,7 @@ } } }, - "1028:10": { + "1029:10": { "preRequisites:11": [ 192 ], @@ -63685,7 +63921,7 @@ } } }, - "1029:10": { + "1030:10": { "preRequisiteTypes:7": [ 1 ], @@ -63760,12 +63996,14 @@ } } }, - "1030:10": { + "1031:10": { "preRequisiteTypes:7": [ - 2 + 2, + 0 ], "preRequisites:11": [ - 286 + 286, + 1035 ], "properties:10": { "betterquesting:10": { @@ -63829,7 +64067,7 @@ } } }, - "1031:10": { + "1032:10": { "preRequisites:11": [ 109, 339 @@ -63902,10 +64140,10 @@ } } }, - "1032:10": { + "1033:10": { "preRequisites:11": [ - 102, - 339 + 339, + 729 ], "properties:10": { "betterquesting:10": { @@ -63975,7 +64213,7 @@ } } }, - "1033:10": { + "1034:10": { "preRequisites:11": [ 286, 1037 @@ -64066,11 +64304,12 @@ } } }, - "1034:10": { + "1035:10": { "preRequisites:11": [ - 1037, 286, - 325 + 325, + 844, + 1037 ], "properties:10": { "betterquesting:10": { @@ -64164,10 +64403,10 @@ } } }, - "1035:10": { + "1036:10": { "preRequisites:11": [ - 1037, - 286 + 286, + 1037 ], "properties:10": { "betterquesting:10": { @@ -64285,14 +64524,15 @@ } } }, - "1036:10": { + "1037:10": { "preRequisites:11": [ + 328, 825 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", + "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -64351,15 +64591,15 @@ } } }, - "1037:10": { + "1038:10": { "preRequisites:11": [ - 1039, - 196 + 196, + 1039 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", + "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -64436,10 +64676,10 @@ } } }, - "1038:10": { + "1039:10": { "preRequisites:11": [ - 535, - 258 + 258, + 535 ], "properties:10": { "betterquesting:10": { @@ -64503,7 +64743,7 @@ } } }, - "1039:10": { + "1040:10": { "preRequisites:11": [ 259 ], @@ -64569,14 +64809,14 @@ } } }, - "1040:10": { + "1041:10": { "preRequisites:11": [ 157 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", + "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -64635,12 +64875,14 @@ } } }, - "1041:10": { + "1042:10": { "preRequisiteTypes:7": [ - 1 + 1, + 2 ], "preRequisites:11": [ - 524 + 524, + 847 ], "properties:10": { "betterquesting:10": { @@ -64716,7 +64958,7 @@ } } }, - "1042:10": { + "1043:10": { "preRequisites:11": [ 286 ], @@ -64782,7 +65024,7 @@ } } }, - "1043:10": { + "1044:10": { "preRequisiteTypes:7": [ 1 ], @@ -64851,7 +65093,7 @@ } } }, - "1044:10": { + "1045:10": { "preRequisites:11": [ 3 ], @@ -64916,6 +65158,303 @@ "taskID:8": "bq_standard:retrieval" } } + }, + "1046:10": { + "preRequisites:11": [ + 56 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §aAlarm§r is a simple tool which plays a loud sound when given a redstone signal. Useful for notifying you if things go wrong.\n\nRight-click the block to configure its range and sound. This tool requires §d4 EU/t§r input to work.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 10, + "OreDict:8": "", + "id:8": "gregtech:warning_sign" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Alarm", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1046, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1751, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1047:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Reservoir Hatch§r acts as an infinite water source as a fluid input hatch.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Cooking for Blockheads", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1047, + "rewards:9": { + "0:10": { + "index:3": 1, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1048:10": { + "preRequisites:11": [ + 3 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Electric Prospector\u0027s Scanner§r given for free now has integration with §eJourneyMap§r.\n\nPick up surface rocks, right-click ore blocks, or use an electric prospector on ore mode to discover veins.\n\nPress the \"action key\" (default: delete) while hovering over a vein to mark it as depleted (or not depleted).\n\nDouble-click a vein to mark it as a waypoint, and again to unmark it.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:filled_map" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Visual Ores", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1048, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1049:10": { + "preRequisiteTypes:7": [ + 1, + 1 + ], + "preRequisites:11": [ + 22, + 60 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Most multiblocks now support rotation along any axis. Right-click with a Wrench on a face with a rotation ↺ symbol to rotate the controller.\n\nThe rules for building multiblocks remain the same.\n\nTake your setups to a new dimension!\n\nThe §3Cleanroom§r, §3Multiblock Miners/Drills§r, and §3Distillation Tower§r do not support being rotated.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "redstonearsenal:tool.wrench_flux", + "tag:10": { + "Energy:3": 0 + } + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Multiblock Rotation", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1049, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1050:10": { + "preRequisites:11": [ + 19 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "§oThis quest accepts LV, MV or HV Miner.§r\n\nThe §3Miner§r mines ore blocks directly below it in a certain radius. Higher tier Miners operate faster and have larger covered areas.\n\nThe LV Miner calls for an §6LV Sensor§r, which requires a bit of §6Quartzite§r. Buy some if you haven\u0027t come across it yet.\n\nAt §5EV§r tier, you can build §3Large Miners§r.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Automatic Mining", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1050, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "questbookSingleMiner", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } } }, "questLines:9": { @@ -64947,10 +65486,10 @@ }, "1:10": { "id:3": 19, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -736, - "y:3": 184 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -740, + "y:3": 180 }, "2:10": { "id:3": 21, @@ -65047,7 +65586,7 @@ "id:3": 53, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -804, + "x:3": -852, "y:3": 224 }, "16:10": { @@ -65055,7 +65594,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, - "y:3": 236 + "y:3": 272 }, "17:10": { "id:3": 60, @@ -65075,7 +65614,7 @@ "id:3": 72, "sizeX:3": 56, "sizeY:3": 56, - "x:3": -908, + "x:3": -956, "y:3": 292 }, "20:10": { @@ -65089,21 +65628,21 @@ "id:3": 146, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 136 }, "22:10": { "id:3": 147, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, - "y:3": 236 + "x:3": -788, + "y:3": 264 }, "23:10": { "id:3": 215, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 40 }, "24:10": { @@ -65117,8 +65656,8 @@ "id:3": 231, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -772, - "y:3": 184 + "x:3": -788, + "y:3": 136 }, "26:10": { "id:3": 259, @@ -65139,7 +65678,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, - "y:3": 136 + "y:3": 68 }, "29:10": { "id:3": 272, @@ -65152,7 +65691,7 @@ "id:3": 273, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 404 }, "31:10": { @@ -65173,22 +65712,22 @@ "id:3": 352, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 88 }, "34:10": { "id:3": 402, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 356 + "x:3": -456, + "y:3": 384 }, "35:10": { "id:3": 403, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -516, - "y:3": 356 + "x:3": -504, + "y:3": 384 }, "36:10": { "id:3": 413, @@ -65215,28 +65754,28 @@ "id:3": 497, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -940, - "y:3": 236 + "x:3": -860, + "y:3": 184 }, "40:10": { "id:3": 498, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, + "x:3": -888, "y:3": 404 }, "41:10": { "id:3": 516, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, - "y:3": 308 + "x:3": -892, + "y:3": 236 }, "42:10": { "id:3": 517, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -892, + "x:3": -940, "y:3": 236 }, "43:10": { @@ -65313,8 +65852,8 @@ "id:3": 774, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, - "y:3": 184 + "x:3": -940, + "y:3": 136 }, "54:10": { "id:3": 779, @@ -65327,15 +65866,15 @@ "id:3": 788, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -564, - "y:3": 404 + "x:3": -456, + "y:3": 240 }, "56:10": { "id:3": 789, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -564, - "y:3": 356 + "x:3": -504, + "y:3": 240 }, "57:10": { "id:3": 814, @@ -65362,8 +65901,8 @@ "id:3": 819, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -516, - "y:3": 404 + "x:3": -504, + "y:3": 432 }, "61:10": { "id:3": 829, @@ -65376,15 +65915,15 @@ "id:3": 890, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 308 + "x:3": -456, + "y:3": 336 }, "63:10": { "id:3": 893, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -516, - "y:3": 308 + "x:3": -504, + "y:3": 336 }, "64:10": { "id:3": 903, @@ -65397,8 +65936,8 @@ "id:3": 913, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 260 + "x:3": -456, + "y:3": 288 }, "66:10": { "id:3": 962, @@ -65411,15 +65950,36 @@ "id:3": 1020, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 404 + "x:3": -456, + "y:3": 432 }, "68:10": { "id:3": 1026, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -840, - "y:3": 276 + "x:3": -884, + "y:3": 280 + }, + "69:10": { + "id:3": 1046, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -504, + "y:3": 288 + }, + "70:10": { + "id:3": 1049, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -504, + "y:3": 192 + }, + "71:10": { + "id:3": 1050, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -788, + "y:3": 184 } } }, @@ -65467,50 +66027,50 @@ "id:3": 31, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -248, - "y:3": 792 + "x:3": -220, + "y:3": 852 }, "4:10": { "id:3": 32, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -176, - "y:3": 796 + "x:3": -140, + "y:3": 856 }, "5:10": { "id:3": 35, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -212, + "x:3": -216, "y:3": 756 }, "6:10": { "id:3": 42, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -180, - "y:3": 720 + "x:3": -260, + "y:3": 732 }, "7:10": { "id:3": 44, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -132, - "y:3": 796 + "x:3": -140, + "y:3": 792 }, "8:10": { "id:3": 47, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -92, - "y:3": 756 + "x:3": -176, + "y:3": 824 }, "9:10": { "id:3": 48, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -92, - "y:3": 796 + "x:3": -140, + "y:3": 824 }, "10:10": { "id:3": 52, @@ -65530,15 +66090,15 @@ "id:3": 57, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -212, - "y:3": 720 + "x:3": -236, + "y:3": 816 }, "13:10": { "id:3": 67, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -132, - "y:3": 756 + "x:3": -176, + "y:3": 792 }, "14:10": { "id:3": 70, @@ -65733,8 +66293,8 @@ "id:3": 126, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -216, - "y:3": 580 + "x:3": -176, + "y:3": 508 }, "42:10": { "id:3": 129, @@ -65831,8 +66391,8 @@ "id:3": 213, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -248, - "y:3": 720 + "x:3": -260, + "y:3": 788 }, "56:10": { "id:3": 227, @@ -66097,8 +66657,8 @@ "id:3": 831, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -216, - "y:3": 612 + "x:3": -156, + "y:3": 544 }, "94:10": { "id:3": 832, @@ -66167,15 +66727,15 @@ "id:3": 896, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 504 + "x:3": -176, + "y:3": 700 }, "104:10": { "id:3": 897, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 544 + "x:3": -216, + "y:3": 700 }, "105:10": { "id:3": 973, @@ -66265,15 +66825,15 @@ "id:3": 65, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -560, - "y:3": 216 + "x:3": -508, + "y:3": 132 }, "5:10": { "id:3": 68, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 312 + "x:3": -488, + "y:3": 276 }, "6:10": { "id:3": 132, @@ -66286,15 +66846,15 @@ "id:3": 139, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -228, - "y:3": 132 + "x:3": -216, + "y:3": 280 }, "8:10": { "id:3": 144, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -228, - "y:3": 168 + "x:3": -216, + "y:3": 240 }, "9:10": { "id:3": 148, @@ -66468,22 +67028,22 @@ "id:3": 176, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -306, - "y:3": -48 + "x:3": -360, + "y:3": 60 }, "34:10": { "id:3": 177, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -258, - "y:3": -48 + "x:3": -360, + "y:3": 144 }, "35:10": { "id:3": 178, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -204, - "y:3": 24 + "x:3": -156, + "y:3": 144 }, "36:10": { "id:3": 179, @@ -66496,15 +67056,15 @@ "id:3": 180, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -204, - "y:3": -12 + "x:3": -120, + "y:3": 144 }, "38:10": { "id:3": 181, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -204, - "y:3": -48 + "x:3": -84, + "y:3": 144 }, "39:10": { "id:3": 182, @@ -66566,36 +67126,36 @@ "id:3": 197, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 204 + "x:3": -360, + "y:3": 240 }, "48:10": { "id:3": 198, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -420, - "y:3": 240 + "x:3": -360, + "y:3": 280 }, "49:10": { "id:3": 199, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -228, - "y:3": 204 + "x:3": -216, + "y:3": 192 }, "50:10": { "id:3": 201, "sizeX:3": 24, "sizeY:3": 24, "x:3": -456, - "y:3": 144 + "y:3": 192 }, "51:10": { "id:3": 234, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -264, - "y:3": 168 + "x:3": -216, + "y:3": 164 }, "52:10": { "id:3": 235, @@ -66616,7 +67176,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -548, - "y:3": 180 + "y:3": 144 }, "55:10": { "id:3": 248, @@ -66644,14 +67204,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -548, - "y:3": 144 + "y:3": 192 }, "59:10": { "id:3": 261, "sizeX:3": 24, "sizeY:3": 24, "x:3": -288, - "y:3": 276 + "y:3": 280 }, "60:10": { "id:3": 267, @@ -66672,7 +67232,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -704, - "y:3": 308 + "y:3": 316 }, "63:10": { "id:3": 297, @@ -66774,10 +67334,10 @@ }, "77:10": { "id:3": 311, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -288, - "y:3": 204 + "sizeX:3": 48, + "sizeY:3": 48, + "x:3": -336, + "y:3": 180 }, "78:10": { "id:3": 312, @@ -66790,15 +67350,15 @@ "id:3": 318, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -330, + "x:3": -324, "y:3": 108 }, "80:10": { "id:3": 328, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 132 + "x:3": -48, + "y:3": 176 }, "81:10": { "id:3": 339, @@ -66811,35 +67371,35 @@ "id:3": 340, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -824, - "y:3": 284 + "x:3": -812, + "y:3": 316 }, "83:10": { "id:3": 341, "sizeX:3": 20, "sizeY:3": 20, "x:3": -392, - "y:3": 280 + "y:3": 296 }, "84:10": { "id:3": 344, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -512, - "y:3": 176 + "x:3": -524, + "y:3": 220 }, "85:10": { "id:3": 347, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 204 + "x:3": -120, + "y:3": 192 }, "86:10": { "id:3": 350, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -160, + "x:3": -124, "y:3": 236 }, "87:10": { @@ -66874,7 +67434,7 @@ "id:3": 512, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, + "x:3": -420, "y:3": 240 }, "92:10": { @@ -66902,7 +67462,7 @@ "id:3": 542, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, + "x:3": -456, "y:3": 240 }, "96:10": { @@ -66916,8 +67476,8 @@ "id:3": 551, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -496, - "y:3": 208 + "x:3": -524, + "y:3": 284 }, "98:10": { "id:3": 555, @@ -66937,113 +67497,113 @@ "id:3": 610, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -480, - "y:3": 176 + "x:3": -524, + "y:3": 252 }, "101:10": { "id:3": 611, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 168 + "x:3": -84, + "y:3": 176 }, "102:10": { "id:3": 669, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 276 }, "103:10": { "id:3": 671, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 240 }, "104:10": { "id:3": 672, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 240 }, "105:10": { "id:3": 673, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 276 }, "106:10": { "id:3": 674, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, + "x:3": -120, "y:3": 276 }, "107:10": { "id:3": 675, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, + "x:3": -120, "y:3": 312 }, "108:10": { "id:3": 676, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, + "x:3": -120, "y:3": 348 }, "109:10": { "id:3": 677, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 312 }, "110:10": { "id:3": 678, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 348 }, "111:10": { "id:3": 679, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 348 }, "112:10": { "id:3": 680, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -168, + "x:3": -132, "y:3": 384 }, "113:10": { "id:3": 693, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, + "x:3": -456, "y:3": 276 }, "114:10": { "id:3": 694, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -528, + "x:3": -420, "y:3": 276 }, "115:10": { "id:3": 732, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, - "y:3": 168 + "x:3": -156, + "y:3": 176 }, "116:10": { "id:3": 745, @@ -67088,207 +67648,221 @@ "y:3": 84 }, "122:10": { + "id:3": 782, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -812, + "y:3": 284 + }, + "123:10": { "id:3": 783, "sizeX:3": 48, "sizeY:3": 48, "x:3": -366, "y:3": 420 }, - "123:10": { + "124:10": { "id:3": 785, "sizeX:3": 20, "sizeY:3": 20, "x:3": -392, - "y:3": 220 + "y:3": 268 }, - "124:10": { + "125:10": { "id:3": 798, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 312 }, - "125:10": { + "126:10": { "id:3": 799, "sizeX:3": 24, "sizeY:3": 24, "x:3": -252, - "y:3": 276 + "y:3": 280 }, - "126:10": { + "127:10": { "id:3": 800, "sizeX:3": 0, "sizeY:3": 0, "x:3": -264, "y:3": 84 }, - "127:10": { + "128:10": { "id:3": 806, "sizeX:3": 24, "sizeY:3": 24, "x:3": -56, "y:3": 108 }, - "128:10": { + "129:10": { "id:3": 807, "sizeX:3": 24, "sizeY:3": 24, "x:3": -276, "y:3": 40 }, - "129:10": { + "130:10": { "id:3": 825, "sizeX:3": 24, "sizeY:3": 24, "x:3": -684, "y:3": -100 }, - "130:10": { + "131:10": { "id:3": 826, "sizeX:3": 40, "sizeY:3": 40, "x:3": -64, "y:3": -108 }, - "131:10": { + "132:10": { "id:3": 827, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -258, - "y:3": -79 + "x:3": -324, + "y:3": 144 }, - "132:10": { + "133:10": { "id:3": 828, "sizeX:3": 32, "sizeY:3": 32, "x:3": -364, - "y:3": 236 + "y:3": 320 }, - "133:10": { + "134:10": { "id:3": 835, "sizeX:3": 24, "sizeY:3": 24, "x:3": -156, "y:3": -48 }, - "134:10": { + "135:10": { "id:3": 838, "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, "y:3": 284 }, - "135:10": { + "136:10": { "id:3": 841, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 312 + "y:3": 324 }, - "136:10": { + "137:10": { "id:3": 849, "sizeX:3": 24, "sizeY:3": 24, "x:3": -360, - "y:3": 276 + "y:3": 364 }, - "137:10": { + "138:10": { "id:3": 850, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -364, - "y:3": 308 + "x:3": -328, + "y:3": 360 }, - "138:10": { + "139:10": { "id:3": 851, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 276 + "y:3": 280 }, - "139:10": { + "140:10": { "id:3": 852, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -84, + "x:3": -48, "y:3": 312 }, - "140:10": { + "141:10": { "id:3": 857, "sizeX:3": 24, "sizeY:3": 24, "x:3": -704, "y:3": 352 }, - "141:10": { + "142:10": { "id:3": 858, "sizeX:3": 32, "sizeY:3": 32, "x:3": -552, "y:3": 348 }, - "142:10": { + "143:10": { "id:3": 859, "sizeX:3": 72, "sizeY:3": 72, "x:3": -444, "y:3": 328 }, - "143:10": { + "144:10": { "id:3": 888, "sizeX:3": 32, "sizeY:3": 32, "x:3": -60, "y:3": 68 }, - "144:10": { + "145:10": { "id:3": 892, "sizeX:3": 48, "sizeY:3": 48, "x:3": -426, "y:3": 420 }, - "145:10": { + "146:10": { "id:3": 899, "sizeX:3": 24, "sizeY:3": 24, "x:3": -864, "y:3": -100 }, - "146:10": { + "147:10": { "id:3": 900, "sizeX:3": 24, "sizeY:3": 24, "x:3": -108, "y:3": 72 }, - "147:10": { + "148:10": { "id:3": 1014, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -740, "y:3": 352 }, - "148:10": { + "149:10": { "id:3": 1025, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 276 + "x:3": -488, + "y:3": 240 }, - "149:10": { + "150:10": { "id:3": 1032, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -816, - "y:3": 316 + "x:3": -812, + "y:3": 352 }, - "150:10": { + "151:10": { "id:3": 1033, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -788, - "y:3": 340 + "x:3": -776, + "y:3": 352 + }, + "152:10": { + "id:3": 1047, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -812, + "y:3": 252 } } }, @@ -69989,8 +70563,8 @@ "id:3": 25, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -60, - "y:3": -42 + "x:3": 72, + "y:3": -36 }, "17:10": { "id:3": 37, @@ -70150,8 +70724,8 @@ "id:3": 496, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -60, - "y:3": -6 + "x:3": 72, + "y:3": 0 }, "40:10": { "id:3": 530, @@ -70256,7 +70830,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 36, - "y:3": -42 + "y:3": -36 }, "55:10": { "id:3": 909, @@ -70319,7 +70893,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 36, - "y:3": -6 + "y:3": 0 + }, + "64:10": { + "id:3": 1048, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": 108, + "y:3": -36 } } }, @@ -70728,6 +71309,13 @@ "y:3": 459 }, "55:10": { + "id:3": 810, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": 312, + "y:3": 444 + }, + "56:10": { "id:3": 952, "sizeX:3": 24, "sizeY:3": 24, @@ -71114,7 +71702,7 @@ "betterquesting:10": { "bg_image:8": "", "bg_size:3": 256, - "desc:8": "Convert between matter and energy with §bApplied Energistics§r§r.\n\nAutomate ALL the things! o/", + "desc:8": "Convert between matter and energy with §bApplied Energistics§r.\n\nAutomate ALL the things! o/", "icon:10": { "Count:3": 1, "Damage:2": 2, diff --git a/overrides/config/CustomMainMenu/mainmenu.json b/overrides/config/CustomMainMenu/mainmenu.json index 55d20f8..4c2a793 100644 --- a/overrides/config/CustomMainMenu/mainmenu.json +++ b/overrides/config/CustomMainMenu/mainmenu.json @@ -123,26 +123,26 @@ "displayDuration": 100, "fadeDuration": 40, "images": [ - "minecraft:textures/gui/title/background/besoiobiy_1.png", - "minecraft:textures/gui/title/background/besoiobiy_2.png", - "minecraft:textures/gui/title/background/cactus_cool.png", - "minecraft:textures/gui/title/background/cobracreeper1.png", - "minecraft:textures/gui/title/background/darkarkangel.png", - "minecraft:textures/gui/title/background/ely_1.png", - "minecraft:textures/gui/title/background/ely_2.png", - "minecraft:textures/gui/title/background/ely_3.png", - "minecraft:textures/gui/title/background/emiuna.png", - "minecraft:textures/gui/title/background/extracoolcat_1.png", - "minecraft:textures/gui/title/background/extracoolcat_2.png", - "minecraft:textures/gui/title/background/extracoolcat_3.png", - "minecraft:textures/gui/title/background/extracoolcat_4.png", - "minecraft:textures/gui/title/background/gaboggamer.png", - "minecraft:textures/gui/title/background/itstheguywhoasked.png", - "minecraft:textures/gui/title/background/lyeo.png", - "minecraft:textures/gui/title/background/pgs_1.png", - "minecraft:textures/gui/title/background/pgs_2.png", - "minecraft:textures/gui/title/background/qr_est.png", - "minecraft:textures/gui/title/background/supasem.png" + "minecraft:textures/gui/title/background/besoiobiy_1.jpg", + "minecraft:textures/gui/title/background/besoiobiy_2.jpg", + "minecraft:textures/gui/title/background/cactus_cool.jpg", + "minecraft:textures/gui/title/background/cobracreeper1.jpg", + "minecraft:textures/gui/title/background/darkarkangel.jpg", + "minecraft:textures/gui/title/background/ely_1.jpg", + "minecraft:textures/gui/title/background/ely_2.jpg", + "minecraft:textures/gui/title/background/ely_3.jpg", + "minecraft:textures/gui/title/background/emiuna.jpg", + "minecraft:textures/gui/title/background/extracoolcat_1.jpg", + "minecraft:textures/gui/title/background/extracoolcat_2.jpg", + "minecraft:textures/gui/title/background/extracoolcat_3.jpg", + "minecraft:textures/gui/title/background/extracoolcat_4.jpg", + "minecraft:textures/gui/title/background/gaboggamer.jpg", + "minecraft:textures/gui/title/background/itstheguywhoasked.jpg", + "minecraft:textures/gui/title/background/lyeo.jpg", + "minecraft:textures/gui/title/background/pgs_1.jpg", + "minecraft:textures/gui/title/background/pgs_2.jpg", + "minecraft:textures/gui/title/background/qr_est.jpg", + "minecraft:textures/gui/title/background/supasem.jpg" ], "shuffle": true } diff --git a/overrides/config/betterquesting/DefaultQuests.json b/overrides/config/betterquesting/DefaultQuests.json index 9ab87fa..1489328 100644 --- a/overrides/config/betterquesting/DefaultQuests.json +++ b/overrides/config/betterquesting/DefaultQuests.json @@ -1,5 +1,5 @@ { - "build:8": "4.2.1", + "build:8": "4.2.2", "format:8": "2.0.0", "questDatabase:9": { "0:10": { @@ -9,7 +9,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.\n\n", + "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -200,7 +200,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.\n\n", + "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -377,7 +377,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§c§rOres in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, the quest book will later guide you towards making §2an HV Battery§r to charge §aHV tools §rin your inventory.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", + "desc:8": "Ores in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, the quest book will later guide you towards making §2an HV Battery§r to charge §aHV tools §rin your inventory.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -760,7 +760,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "In most expert packs, you want to try to process as little ore as possible before you get access to ore doubling. It\u0027s a habit most of us pick up.\n\n§eYou shouldn\u0027t feel any pressure to do that in Nomifactory, though§r. Ore veins are massive, and mining is extremely fast with §aMining Hammers§r. What\u0027s more, even once you get access to §3Macerators§r, they initially process ore slowly and require power to operate.\n\nObvious exceptions would be rare materials or anything you buy with §dNomicoins §rbecause you can\u0027t find it. Those are worth doubling, if possible.\n\nBut at least for now, you shouldn\u0027t feel any guilt about smelting the more common ores without doubling them! §eOre doubling can be safely ignored until you have the §2Steam Grinder§r§e, or Medium Voltage machines or even later.§r", + "desc:8": "In most expert packs, you want to try to process as little ore as possible before you get access to ore doubling. It\u0027s a habit most of us pick up.\n\n§eYou shouldn\u0027t feel any pressure to do that in Nomifactory, though§r. Ore veins are massive, and mining is extremely fast with §aMining Hammers§r. What\u0027s more, even once you get access to §3Macerators§r, they initially process ore slowly and require power to operate.\n\nObvious exceptions would be rare materials or anything you buy with §dNomicoins §rbecause you can\u0027t find it. Those are worth doubling, if possible.\n\nBut at least for now, you shouldn\u0027t feel any guilt about smelting the more common ores without doubling them! §eOre doubling can be safely ignored until you have the §2Steam Grinder§e, or Medium Voltage machines or even later.§r", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1158,7 +1158,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", + "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1694,7 +1694,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You already have §6Steel§r, but it can be made much faster in the §3Alloy Smelter§r, at the cost of EU.\n\nYou might want to save your §6Coal Dust§r for circuits and use §6Charcoal Dust§r instead. Later, you can also process either of these dusts, §6Coal Coke Dust§r, §2or Diamond Dust§r into §6Carbon Dust§r, which can be used for Steel and other useful things.", + "desc:8": "You already have §6Steel§r, but it can be made much faster in the §3Alloy Smelter§r, at the cost of EU. Once you build the §3Electric Blast Furnace§r, you may opt to make Steel there with Oxygen instead.\n\nYou might want to save your §6Coal Dust§r for circuits and use §6Charcoal Dust§r instead. Later, you can also process either of these dusts, §6Coal Coke Dust§r, §2or Diamond Dust§r into §6Carbon Dust§r, which can be used for Steel and other useful things.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1761,7 +1761,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nRemember that Hatches and Buses can be replaced by Hatches and Buses of any tier, although the Input Bus must be at least LV, as there are 2 inputs, and that you can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.\n", + "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nRemember that Hatches and Buses can be replaced by Hatches and Buses of any tier, although the Input Bus must be at least LV, as there are 2 inputs, and that you can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -2897,7 +2897,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts any §2§oLV Energy Converter§r§o.\n\n§rThe §3Steam Dynamos§r§r§r you have made are generating §aRF power§r, but §bGregTech§r machines require §aEU power§r. With your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §3§2Energy Converter§r.\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", + "desc:8": "§oNote: this quest accepts any §oLV Energy Converter§o.\n\n§rThe §3Steam Dynamos§r you have made are capable of generating §aRF power§r, but §bGregTech§r machines require §aEU power§r. With your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §2Energy Converter§r.\n\n§cNote that the two are incompatible!§r\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3597,7 +3597,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §2distlling Liquid Air§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §2distlling Liquid Air§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4037,7 +4037,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9liquid Rubber§r.\n\n", + "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9liquid Rubber§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4496,7 +4496,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§6§2Perfect Gems§r can be obtained from such missions.", + "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§2Perfect Gems§r can be obtained from such missions.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4625,13 +4625,13 @@ }, "63:10": { "preRequisites:11": [ - 62, - 1 + 1, + 62 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.\n\n", + "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4775,18 +4775,18 @@ "65:10": { "preRequisiteTypes:7": [ 0, - 0, - 2 + 2, + 0 ], "preRequisites:11": [ 246, - 386, - 328 + 328, + 386 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", + "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore\n§2* Cobaltite Ore\n* Laurite Ore\n* Cuprorhodsite Ore§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5238,7 +5238,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.\n", + "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5718,7 +5718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of small dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", + "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5799,7 +5799,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \n\nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.\n", + "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \n\nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6162,7 +6162,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -6196,8 +6196,20 @@ "Damage:2": 568, "OreDict:8": "", "id:8": "gregtech:meta_item_1" - }, - "1:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 593, "OreDict:8": "", @@ -6389,7 +6401,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §a§3§2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n", + "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n§rAlternatively, you can use §9Sulfuric Acid§r to create §9Chemical Dyes§r of the required color, and use them to make dyed §6Glass Lenses§r. Chemical Dyes can be infinitely looped.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6452,8 +6464,8 @@ "89:10": { "preRequisites:11": [ 87, - 236, - 130 + 130, + 236 ], "properties:10": { "betterquesting:10": { @@ -6723,8 +6735,8 @@ }, "93:10": { "preRequisites:11": [ - 98, - 96 + 96, + 98 ], "properties:10": { "betterquesting:10": { @@ -6796,7 +6808,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Sulfuric Acid is mainly produced in a 3-step process:\n- Sulfur added to Oxygen to produce Sulfur Dioxide. SO₂ also can come from treating certain Sulfur-containing Dusts with Oxygen in the EBF, or by processing Nether Air.\n- Sulfur Dioxide added to more Oxygen, to produce Sulfur Trioxide.\n- Sulfur Trioxide added to Water, to produce Sulfuric Acid.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at HV.\n\n§rYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things, but is also easily available via §bDeep Mob Evolution§r\u0027s §aBlaze Model§r.", + "desc:8": "§9Sulfuric Acid§r is mainly produced in a 3-step process:\n\n- §6Sulfur§r added to §9Oxygen§r to produce §eSulfur Dioxide§r. SO₂ also can come from treating certain Sulfur-containing Dusts with Oxygen in the EBF, or by processing §eNether Air§r.\n\n- Sulfur Dioxide added to more Oxygen, to produce §eSulfur Trioxide§r.\n\n- Sulfur Trioxide added to §9Water§r, to produce §9Sulfuric Acid§r.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at §6HV§r.\n\n§rYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things, but is also easily available via §bDeep Mob Evolution§r\u0027s §aBlaze Model§r.\n\nIf you are using §dGregTech Pipes§r, check that your pipe material of choice can handle acids.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6858,13 +6870,13 @@ }, "95:10": { "preRequisites:11": [ - 973, - 184 + 184, + 973 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Ethylene§r is a hydrocarbon obtained from §dOil Processing§r, or by dehydrating §9Ethanol§r with §9Sulfuric Acid§r in a §3Chemical Reactor§r. Choose a method that works for you:\n\n- The §9Ethanol§r route allows you to use your existing §6Sugarcane§r farm to produce §9Ethylene§r. However, the recipes require §bMedium Voltage§r machines to run.\n\n- The §dOil Processing§r route requires §2only LV machines§r, but you will have to source §9Oil§r, or its variants, from somewhere. §2Severely Steam-Cracked Light Fuel§r is most efficient with §9Raw Oil, Oil and Heavy Oil§r. §2Severely Steam-Cracked Naphtha§r is more efficient when you are using §9Light Oil§r.\n\nIt is an extremely important chemical in the production of plastics, as you\u0027ll need §9Ethylene§r in your production of §9Polyethylene (PE)§r, §9Polyvinyl Chloride (PVC)§r, and can be used in the production of §9Styrene-Butadiene Rubber (SBR)§r, the best form of rubber.", + "desc:8": "§9Ethylene§r is a hydrocarbon obtained from §dOil Processing§r, or by dehydrating §9Ethanol§r with §9Sulfuric Acid§r in a §3Chemical Reactor§r. Choose a method that works for you:\n\n- The §9Ethanol§r route allows you to use your existing §6Sugarcane§r farm to produce §9Ethylene§r. However, the recipes require §bMedium Voltage§r machines to run.\n\n- The §dOil Processing§r route requires §2only LV machines§r, but you will have to source §9Oil§r, or its variants, from somewhere. §2Severely Steam-Cracked Light Fuel§r is most efficient with §9Oil§r and §9Heavy Oil§r. §2Severely Steam-Cracked Naphtha§r is more efficient when you are using §9Raw Oil§r and §9Light Oil§r.\n\nIt is an extremely important chemical in the production of plastics, as you\u0027ll need §9Ethylene§r in your production of §9Polyethylene (PE)§r, §9Polyvinyl Chloride (PVC)§r, and can be used in the production of §9Styrene-Butadiene Rubber (SBR)§r, the best form of rubber.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7517,15 +7529,15 @@ }, "104:10": { "preRequisites:11": [ + 89, 96, 109, - 110, - 89 + 110 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\n§2With PAE2, recipes with tools have been improved by a huge amount. However, still aim for recipes without tools.§r\n\nUse recipes that use machines instead!\n\n", + "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\n§2With PAE2, recipes with tools have been improved by a huge amount. However, still aim for recipes without tools.§r\n\nUse recipes that use machines instead!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7654,8 +7666,8 @@ }, "106:10": { "preRequisites:11": [ - 104, - 62 + 62, + 104 ], "properties:10": { "betterquesting:10": { @@ -7789,8 +7801,8 @@ }, "108:10": { "preRequisites:11": [ - 109, - 100 + 100, + 109 ], "properties:10": { "betterquesting:10": { @@ -7862,7 +7874,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to §29 stacks of 512 items (or 4608 items)§r for passive autocrafting and to push into other inventories. Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.\n\n", + "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to §29 stacks of 512 items (or 4608 items)§r for passive autocrafting and to push into other inventories. Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7998,8 +8010,8 @@ }, "111:10": { "preRequisites:11": [ - 105, - 62 + 62, + 105 ], "properties:10": { "betterquesting:10": { @@ -8347,7 +8359,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.", + "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.\n\nAt first, you will have to create §6Black Bronze Dust§r on the way to §6Black Steel Dust§r. By making an §6HV Mixer§r, you can skip this step with a shortcut recipe.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8951,7 +8963,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.\n\n", + "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9388,8 +9400,8 @@ "132:10": { "preRequisites:11": [ 35, - 203, - 52 + 52, + 203 ], "properties:10": { "betterquesting:10": { @@ -9788,7 +9800,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6§2Rhodium Plated Lumium-Palladium§r,§6 Niobium-Titanium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", + "desc:8": "With §2Rhodium Plated Lumium-Palladium§r,§6 Niobium-Titanium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10441,7 +10453,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r. \n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nYou should have set up a §3Vaccum Freezer§r for §6Kanthal§r, but if you haven\u0027t done it yet or want to improve your setup, routing through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering you\u0027re system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", + "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r.\n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nRouting through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering your system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10494,7 +10506,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Vacuum Freezers§r are primarily used to cool down hot ingots.\n\nThey\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", + "desc:8": "§3Vacuum Freezers§r are primarily used to cool down §6Hot Ingots§r. They\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nThe energy tier required for the Vacuum Freezer is typically one tier below the tier used to process the ingot in the §3Electric Blast Furnace§r. \n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10548,6 +10560,12 @@ "Damage:2": 1002, "OreDict:8": "", "id:8": "gregtech:machine" + }, + "1:10": { + "Count:3": 14, + "Damage:2": 3, + "OreDict:8": "", + "id:8": "gregtech:metal_casing" } }, "taskID:8": "bq_standard:retrieval" @@ -10562,7 +10580,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§6§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.\n\n", + "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10765,7 +10783,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With tier three circuits in hand, it\u0027s time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The § §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", + "desc:8": "With tier three circuits in hand, it\u0027s time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11059,13 +11077,13 @@ }, "158:10": { "preRequisites:11": [ - 157, - 150 + 150, + 157 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11658,7 +11676,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Water§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", + "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Oxygen§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11793,7 +11811,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Palladium§r is found in §6Palladium Ore§r, which is found alongside §6Platinum Ore§r. §You can also get Palladium from Platinum Group Processing§r. If you haven\u0027t found a vein yet, you should buy some.\n\nPalladium is smelted in the §3Electric Blast Furnace§r.", + "desc:8": "§6Palladium§r is found in §6Palladium Ore§r, which is found alongside §6Platinum Ore§r. ou can also get Palladium from Platinum Group Processing§r. If you haven\u0027t found a vein yet, you should buy some.\n\nPalladium is smelted in the §3Electric Blast Furnace§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11928,7 +11946,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.\n", + "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12131,7 +12149,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products. Make sure you set the correct circuit configuration for the dimension you are in.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products. Make sure you set the correct circuit configuration for the dimension you are in.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12816,7 +12834,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts either Oil, Raw Oil, Light Oil or Heavy Oil.§r\n\nPetrochemistry is the category of organic chemistry pertaining to petroleum, otherwise known as §9Oil§r.\n\n§bGregTech§r\u0027s petrochemistry may seem daunting at first, given the sheer number of chemicals and processing options, but it\u0027s actually easier to get into than you think.\n\nOil is the starting point, and can be found in several variants which you can pump from finite natural wells on the Overworld, as well as coming renewably from §6Oilsands Ore§r and §6Soul Sand§r, and directly in liquid form from a §3Fluid Rig§r.\n\n§2The Fluid Rig can also harvest Raw Oil, Heavy Oil and Light Oil depending on your fluid vein. Raw Oil is similar to Oil, giving the same ratios when distilled but needing double the fluid. Heavy Oil and Light Oil give different ratios when distilled.§r \n\nStart off by distilling the Oil. This will result in §9Sulfuric Heavy Fuel§r, §9Sulfuric Light Fuel§r, §9Sulfuric Naphtha§r, and/or §9Sulfuric Gas§r.\n\nThese will all need to be hydrodesulfurized using §9Hydrogen§r in a §3Chemical Reactor§r or §2Oil Cracking Unit§r, which produces the non-Sulfuric versions.\n\nAll of these products are useful, so figure out how you want to store the variety and large quantities of fluids.\n\nThe upcoming quests will guide you through the basics of petrochemistry. Once you\u0027ve mastered that, feel free to explore further.\n", + "desc:8": "§oNote: this quest accepts either Oil, Raw Oil, Light Oil or Heavy Oil.§r\n\nPetrochemistry is the category of organic chemistry pertaining to petroleum, otherwise known as §9Oil§r.\n\n§bGregTech§r\u0027s petrochemistry may seem daunting at first, given the sheer number of chemicals and processing options, but it\u0027s actually easier to get into than you think.\n\nOil is the starting point, and can be found in several variants which you can pump from finite natural wells on the Overworld, as well as coming renewably from §6Oilsands Ore§r and §6Soul Sand§r, and directly in liquid form from a §3Fluid Rig§r.\n\n§2The Fluid Rig can also harvest Raw Oil, Heavy Oil and Light Oil depending on your fluid vein. Raw Oil is similar to Oil, giving the same ratios when distilled but needing double the fluid. Heavy Oil and Light Oil give different ratios when distilled.§r \n\nStart off by distilling the Oil. This will result in §9Sulfuric Heavy Fuel§r, §9Sulfuric Light Fuel§r, §9Sulfuric Naphtha§r, and/or §9Sulfuric Gas§r.\n\nThese will all need to be hydrodesulfurized using §9Hydrogen§r in a §3Chemical Reactor§r or §2Oil Cracking Unit§r, which produces the non-Sulfuric versions.\n\nAll of these products are useful, so figure out how you want to store the variety and large quantities of fluids.\n\nThe upcoming quests will guide you through the basics of petrochemistry. Once you\u0027ve mastered that, feel free to explore further.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13280,6 +13298,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 569, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -13691,12 +13727,12 @@ }, "197:10": { "preRequisites:11": [ - 201 + 311 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14465,7 +14501,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.\n\n", + "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14611,7 +14647,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r. ", + "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14746,7 +14782,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.\n", + "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14915,13 +14951,13 @@ }, "214:10": { "preRequisites:11": [ - 232, - 55 + 55, + 232 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Rutile Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).\n\n\n", + "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Bauxite Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15051,8 +15087,8 @@ "216:10": { "preRequisites:11": [ 89, - 897, - 214 + 214, + 895 ], "properties:10": { "betterquesting:10": { @@ -15187,7 +15223,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n§\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.\n\n", + "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15785,7 +15821,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.\n", + "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15847,13 +15883,13 @@ }, "228:10": { "preRequisites:11": [ - 490, - 29 + 29, + 490 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThis quest calls for a §aRedstone Timer§r, but there are other ways to make snad grow sugar cane even faster (like a vanilla observer clock pointing into the Snad). Make sure to set the timer to pulse as fast as possible.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", + "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThe premier way to activate Snad is with a §6Redstone Conduit§r. By force-connecting the conduit to the side of the Snad block with a Wrench, and inserting a §aSensor Filter§r, you can get the highest growth rate possible. Simpler methods such as a §aRedstone Clock§r can also work, but not as effectively.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15913,21 +15949,39 @@ "Damage:2": 0, "OreDict:8": "", "id:8": "enderio:block_vacuum_chest" - }, - "2:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", - "id:8": "extrautils2:redstoneclock" + "id:8": "enderio:item_redstone_conduit" }, - "3:10": { + "1:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "enderio:item_redstone_sensor_filter" + }, + "2:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", "id:8": "storagedrawers:upgrade_void" } }, - "taskID:8": "bq_standard:retrieval" + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -16385,8 +16439,8 @@ }, "236:10": { "preRequisites:11": [ - 894, 96, + 894, 1041 ], "properties:10": { @@ -16521,16 +16575,16 @@ }, "238:10": { "preRequisites:11": [ - 250, 241, + 250, + 258, 330, - 411, - 258 + 411 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r§r and the other items are otherwise craftable.", + "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r and the other items are otherwise craftable.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16667,7 +16721,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a decent quantity of §6Neutronium§r. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", + "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a large quantity of §6Neutronium§r. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16735,7 +16789,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17843,7 +17897,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18205,15 +18259,15 @@ }, "262:10": { "preRequisites:11": [ + 207, 385, 387, - 207, - 253 + 827 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes. ", + "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18280,7 +18334,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Small Piles of Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.\n", + "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\nThere is an alternative recipe set to §9Programmed Circuit §64§r, which performs the recipe in a larger batch and §2allows you to skip combining small piles into full dusts.§r\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19258,8 +19312,8 @@ }, "278:10": { "preRequisites:11": [ - 682, - 30 + 30, + 682 ], "properties:10": { "betterquesting:10": { @@ -19337,7 +19391,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.\n\n", + "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19346,7 +19400,7 @@ "id:8": "minecraft:dragon_egg" }, "ignoresview:1": 0, - "ismain:1": 0, + "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, "name:8": "Breaking Some Eggs", @@ -19942,8 +19996,8 @@ "287:10": { "preRequisites:11": [ 234, - 847, - 286 + 286, + 847 ], "properties:10": { "betterquesting:10": { @@ -20109,12 +20163,12 @@ }, "289:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 839, - 313 + 313, + 839 ], "properties:10": { "betterquesting:10": { @@ -20759,7 +20813,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.\n\n", + "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -21591,12 +21645,13 @@ }, "311:10": { "preRequisites:11": [ - 197 + 201, + 827 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", + "desc:8": "§6RTM-Alloy§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -21608,7 +21663,7 @@ "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, - "name:8": "Tungstensteel Coil Blocks", + "name:8": "RTM-Alloy Coil Blocks", "partysinglereward:1": 0, "questlogic:8": "AND", "repeat_relative:1": 1, @@ -21663,7 +21718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22589,7 +22644,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.\n", + "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23124,14 +23179,14 @@ }, "335:10": { "preRequisites:11": [ - 334, 196, + 334, 1038 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.\n", + "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23404,7 +23459,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\nEV motors require a better material than §6Steel§r for its magnetism. §6\n\nNeodynium§r is required, which is mainly achieved from §6Rare Earth§r. The main sources of this are §6Redstone§r, and everything inside of §6Bastnasite§r veins.\n\n§2Starting at EV, 4A Energy and Dynamo hatches are available at each tier.", + "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\nEV motors require a better material than §6Steel§r for its magnetism. §6\n\nNeodynium§r is required, which is mainly achieved from §6Rare Earth§r. The main sources of this are §6Redstone§r, and everything inside of §6Bastnasite§r veins.\n\nEV Machine Hulls unlock a handful of nice things. Check the surrounding quests for more information.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -25051,7 +25106,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNow this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.§r\n\nThe §dCreative Tank§r is a major milestone. Great work!\n\nThis tank is your first proper creative item, which can be set to a fluid and then provides an infinite quantity of that fluid. §2Use the Creative Tank Provider to supply you with Creative Tanks.\n\nThe GT Creative Tank has been enhanced. You can turn it on and off, configure exactly how much fluid you want it to push and how often, and change which direction the fluid is pushed out. You can even configure the fluid you want directly from JEI!§r\n\nFrom there you can set up tanks with infinite quantities of every fluid you can think of. §3Fluid Solidifiers§r §2or the much more powerful Large Solidification Arrays§r can be used to make infinite of every element you can melt and solidify.\n\nThis is quite a game-changer as far as infrastructure goes. You\u0027ll find that many machines won\u0027t need to be used for their original purpose anymore. Some major base redesign is in order. Have you considered moving to space?\n\nAll that said, §ethe pack will still be challenging to complete§r. Infinite resources and power is nice, but it\u0027s not everything. There are plenty of materials you can\u0027t melt, and creative items will push your factory automation engineering skills to their limits.\n\nOnward to the final challenge: the §dCreative Chest§r!\n\n", + "desc:8": "§oNow this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.§r\n\nThe §dCreative Tank§r is a major milestone. Great work!\n\nThis tank is your first proper creative item, which can be set to a fluid and then provides an infinite quantity of that fluid. §2Use the Creative Tank Provider to supply you with Creative Tanks.\n\nThe GT Creative Tank has been enhanced. You can turn it on and off, configure exactly how much fluid you want it to push and how often, and change which direction the fluid is pushed out. You can even configure the fluid you want directly from JEI!§r\n\nFrom there you can set up tanks with infinite quantities of every fluid you can think of. §3Fluid Solidifiers§r §2or the much more powerful Large Solidification Arrays§r can be used to make infinite of every element you can melt and solidify.\n\nThis is quite a game-changer as far as infrastructure goes. You\u0027ll find that many machines won\u0027t need to be used for their original purpose anymore. Some major base redesign is in order. Have you considered moving to space?\n\nAll that said, §ethe pack will still be challenging to complete§r. Infinite resources and power is nice, but it\u0027s not everything. There are plenty of materials you can\u0027t melt, and creative items will push your factory automation engineering skills to their limits.\n\nOnward to the final challenge: the §dCreative Chest§r!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26152,7 +26207,6 @@ }, "389:10": { "preRequisites:11": [ - 251, 262, 386 ], @@ -26740,7 +26794,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nShift and hover over different coil blocks: they tell you the number of items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of §6Tungstensteel§r coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r, and §21 maintenance hatch§r, §21 muffler hatch§r, and at least §a1 energy hatch§r, all of any tier.\n\n", + "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nShift and hover over different coil blocks: they tell you the number of items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of §6Tungstensteel§r coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r, and §21 maintenance hatch§r, §21 muffler hatch§r, and at least §a1 energy hatch§r, all of any tier.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26813,7 +26867,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.", + "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.\n\nGenerally, the best plasma fuels to use will be §eHelium Plasma§r with a §3Fusion Reactor Mk1§r, §eTin Plasma§r when you upgrade to §3Mk2§r, and §eAmericium Plasma§r when you upgrade to §3Mk3§r. However, the other plasmas are still competitive, and your setup might lend itself better to a different plasma.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27025,7 +27079,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. These are seperate on each side of the machine, meaning you can have up to six different covers! To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine. This quest accepts a §aScrewdriver§r and §aCrowbar§r made from any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §lDetector§2: Available in Item, Fluid, Energy, Activity, and Advanced Activity flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §lDigital Interface§r: §2A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.§r\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.\n", + "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. These are seperate on each side of the machine, meaning you can have up to six different covers! To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine. This quest accepts a §aScrewdriver§r and §aCrowbar§r made from any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §lDetector§r: Available in §aItem§r, §aFluid§r, §aEnergy§r, and §aActivity§r flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §lAdvanced Detectors§r: Available as §aItem§r, §aFluid§r, §aEnergy§r, or §aActivity§r, these covers can emit redstone in more ways than their normal counterparts. Specifically, the §aItem§r, §aFluid§r, and §aEnergy§r advanced detectors can emit a latched redstone signal based on the amount of item/fluid between a set min and max, or they can emit redstone signals proportional to the amount of item/fluids between a set min and max. The §aAdvanced Activity Detector§r emits redstone proportional to a machines progress on a recipe \n\n- §lDigital Interface§r: A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27264,7 +27318,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r or §6Platinum Group Processing§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §ovastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r anywhere you want. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.\n\n", + "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r or §6Platinum Group Processing§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §ovastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r anywhere you want. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27737,7 +27791,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!\n", + "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -30908,7 +30962,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", + "desc:8": "§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -30975,7 +31029,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but most presently you will need it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.", + "desc:8": "§oThis quest accepts any Autoclave from LV to IV.§r\n\nAn §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but most presently you will need it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.\n\n§6Pulsating Crystals§r will be required immediately to make §aSnad§r, the key to infinite fuel.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31027,7 +31081,7 @@ "0:10": { "Count:3": 1, "Damage:2": 125, - "OreDict:8": "", + "OreDict:8": "questbookAutoclave", "id:8": "gregtech:machine" } }, @@ -31249,8 +31303,8 @@ }, "494:10": { "preRequisites:11": [ - 102, - 62 + 62, + 102 ], "properties:10": { "betterquesting:10": { @@ -31904,7 +31958,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31971,7 +32025,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Brewery.\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics. §2An alternative and more resource efficient way of making biomass is with a Pyrolyse Oven, Water, and Bio Chaff.", + "desc:8": "§oThis quest accepts any Brewery from LV to IV.§r\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics. §2An alternative and more resource efficient way of making biomass is with a Pyrolyse Oven, Water, and Bio Chaff.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32211,7 +32265,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32431,10 +32485,10 @@ }, "511:10": { "preRequisites:11": [ - 296, - 272, + 18, 26, - 18 + 272, + 296 ], "properties:10": { "betterquesting:10": { @@ -32574,7 +32628,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33277,7 +33331,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Assembling Machine§r.\n\nRequires a bunch of standard circuit components.", + "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Circuit Assembler§r.\n\nRequires a bunch of standard circuit components.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33475,14 +33529,14 @@ }, "527:10": { "preRequisiteTypes:7": [ - 0, 2, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, + 235, 275, - 235 + 311 ], "properties:10": { "betterquesting:10": { @@ -33554,7 +33608,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.\n", + "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33763,7 +33817,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Assembling Machine§r.", + "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Circuit Assembler§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33892,14 +33946,14 @@ }, "533:10": { "preRequisiteTypes:7": [ + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 535, - 536, - 325 + 536 ], "properties:10": { "betterquesting:10": { @@ -34041,7 +34095,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nThis is the first tier of Circuit which must be §2researched§r in the §3Research Station§r.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Assembling Machine§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.\n", + "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nThis is the first tier of Circuit which must be §2researched§r in the §3Research Station§r.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Circuit Assembler§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34108,7 +34162,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dCreative Tank§r. Multiblock hatches are a different matter: feel free to upgrade your §3EBF§rs to Ultimate Voltage, if you can handle the power drain.\n", + "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dCreative Tank§r. Multiblock hatches are a different matter: feel free to upgrade your §3EBF§rs to Ultimate Voltage, if you can handle the power drain.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34343,9 +34397,9 @@ "540:10": { "preRequisites:11": [ 21, + 76, 147, - 259, - 76 + 259 ], "properties:10": { "betterquesting:10": { @@ -34480,8 +34534,8 @@ "542:10": { "preRequisites:11": [ 197, - 296, - 209 + 209, + 296 ], "properties:10": { "betterquesting:10": { @@ -34553,7 +34607,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34792,7 +34846,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts both LV and MV Distillery. §2\n\nIf you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r. Therefore, it is recommended for fluids with only one useful output, like §9Biomass§r, §9Diluted Sulfuric Acid§r, and §9Diluted Hydrochloric Acid§r.\n\nHowever, the Distillation Tower is recommended for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nYou\u0027re going to need it soon!\n\n", + "desc:8": "§oNote: this quest accepts both LV and MV Distillery. §2\n\nIf you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r. Therefore, it is recommended for fluids with only one useful output, like §9Biomass§r, §9Diluted Sulfuric Acid§r, and §9Diluted Hydrochloric Acid§r.\n\nHowever, the Distillation Tower is recommended for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nYou\u0027re going to need it soon!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34982,7 +35036,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", + "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35055,6 +35109,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "extrautils2:angelblock" + } + }, + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -36498,7 +36570,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nDespite this, you\u0027ll still need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.\n\n", + "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nDespite this, you\u0027ll still need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36603,7 +36675,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36670,7 +36742,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36737,7 +36809,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36804,7 +36876,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36872,7 +36944,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36939,7 +37011,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37007,7 +37079,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37074,7 +37146,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37179,7 +37251,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37246,7 +37318,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37313,7 +37385,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37380,7 +37452,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37447,7 +37519,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37514,7 +37586,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37581,7 +37653,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37648,7 +37720,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37716,7 +37788,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37784,7 +37856,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37851,7 +37923,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -37918,7 +37990,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -37985,7 +38057,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38217,7 +38289,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r, §2or from the Tier Eight Micro Miner.§r\n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.\n", + "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r, §2or from the Tier Eight Micro Miner.§r\n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38414,8 +38486,8 @@ }, "610:10": { "preRequisites:11": [ - 344, - 233 + 233, + 344 ], "properties:10": { "betterquesting:10": { @@ -38627,7 +38699,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38694,7 +38766,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38761,7 +38833,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38828,7 +38900,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38895,7 +38967,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38962,7 +39034,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39030,7 +39102,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39098,7 +39170,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39165,7 +39237,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39227,13 +39299,13 @@ }, "622:10": { "preRequisites:11": [ - 953, - 10 + 10, + 953 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39300,7 +39372,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39367,7 +39439,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39434,7 +39506,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39501,7 +39573,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39568,7 +39640,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39635,7 +39707,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39702,7 +39774,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39769,7 +39841,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39836,7 +39908,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39903,7 +39975,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39970,7 +40042,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40037,7 +40109,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40102,7 +40174,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40169,7 +40241,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40236,7 +40308,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40303,7 +40375,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40370,7 +40442,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40437,7 +40509,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40504,7 +40576,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40571,7 +40643,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40638,7 +40710,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40705,7 +40777,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40767,13 +40839,13 @@ }, "645:10": { "preRequisites:11": [ - 952, - 10 + 10, + 952 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40840,7 +40912,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40907,7 +40979,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40974,7 +41046,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41041,7 +41113,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -41108,7 +41180,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41176,7 +41248,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41244,7 +41316,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41311,7 +41383,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41378,7 +41450,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41445,7 +41517,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41512,7 +41584,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41579,7 +41651,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41646,7 +41718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41713,7 +41785,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41780,7 +41852,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41847,7 +41919,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41914,7 +41986,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41981,7 +42053,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42048,7 +42120,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42115,7 +42187,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42182,7 +42254,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42249,7 +42321,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42317,7 +42389,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42384,7 +42456,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6§6Plutonium 239§r, and §6Plutonium 241§r.", + "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6Plutonium 239§r, and §6Plutonium 241§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42504,7 +42576,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r, made from Thorium enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6§6Neptunium 236§r, and §6Neptunium 237§r.", + "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r, made from Thorium enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6Neptunium 236§r, and §6Neptunium 237§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42577,7 +42649,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\n", + "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\nYou may find Red Granite as a viable source of Uranium-238 if you are able to process it in large enough volumes to offset the low base chance.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42650,7 +42722,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.\n", + "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42787,8 +42859,8 @@ "675:10": { "preRequisites:11": [ 669, - 674, - 673 + 673, + 674 ], "properties:10": { "betterquesting:10": { @@ -42933,7 +43005,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", + "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43189,7 +43261,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §aImplosion Compressor§r is like an autoclave that uses explosions instead of water. \n\nIt is the only way to turn some gem dusts into gemstones. However, for some gemstones, like §6Apatite§r, it is much more efficient to use an §3Autoclave§r§r with §9Distilled Water§r.\n\nIt will also be vital for processing §5Motes of Omnium§r.\n\nIn addition to the controller and casings, you will need one §eLV or better§r §6Item Input Bus§r, §6Item Output Bus§r, and §6Energy Input Hatch§r.\n\n§2If desired, you may upgrade this directly to an Electric Implosion Compressor, which has no improvements over the base multi for now.", + "desc:8": "The §aImplosion Compressor§r is like an autoclave that uses explosions instead of water. \n\nIt is the only way to turn some gem dusts into gemstones. However, for some gemstones, like §6Apatite§r, it is much more efficient to use an §3Autoclave§r with §9Distilled Water§r.\n\nIt will also be vital for processing §5Motes of Omnium§r.\n\nIn addition to the controller and casings, you will need one §eLV or better§r §6Item Input Bus§r, §6Item Output Bus§r, and §6Energy Input Hatch§r.\n\n§2If desired, you may upgrade this directly to an Electric Implosion Compressor, which has no improvements over the base multi for now.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43400,7 +43472,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.\n\n", + "desc:8": "§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45555,13 +45627,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §6Ore Byproduct Page§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and a guaranteed 3 tiny piles of byproduct. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3Centrifuge§r: separates Pure or Impure dusts into the final material, producing a guaranteed §21 (nerfed from 3) tiny pile of byproduct§r.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 3 additional tiny piles of byproduct, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.\n", + "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §6Ore Byproduct Page§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and 1/3 of a byproduct dust. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3Centrifuge§r: separates Pure or Impure dusts into the final material, producing 1/9 byproduct dust.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 1/3 byproduct dust, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 4, + "Damage:2": 39, "OreDict:8": "", - "id:8": "gregtech:meta_dust_tiny" + "id:8": "gregtech:meta_dust" }, "ignoresview:1": 0, "ismain:1": 0, @@ -45595,7 +45667,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis is an important part of a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation of how to passively automate this.\n\n§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nWith Resonant Clathrates now accessible, everything you need for crafting §6Pulsating Polymer Clay§r can be automated in a net-positive loop.§r Doing so is the first step in automation of §bDeep Mob Evolution§r, which is §ea primary source of important materials for the rest of the pack§r.\n\nThe exact implementation is up to you. Make use of the various LV and MV machines you have, and look through §bJEI§r and the Processing Lines Tab for the ways to get infinite sources of each ingredient (like §aEnderman Models§r for pearls).\n\n", + "desc:8": "§oThis is an important part of a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation of how to passively automate this.\n\n§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nWith Resonant Clathrates now accessible, everything you need for crafting §6Pulsating Polymer Clay§r can be automated in a net-positive loop.§r Doing so is the first step in automation of §bDeep Mob Evolution§r, which is §ea primary source of important materials for the rest of the pack§r.\n\nThe exact implementation is up to you. Make use of the various LV and MV machines you have, and look through §bJEI§r and the Processing Lines Tab for the ways to get infinite sources of each ingredient (like §aEnderman Models§r for pearls).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45730,7 +45802,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.\n\n", + "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45770,7 +45842,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them. An alternative to this is storage buses on §3Gregtech Tanks and Drums§r.\n\n", + "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them. An alternative to this is storage buses on §3Gregtech Tanks and Drums§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -46403,12 +46475,12 @@ }, "745:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, - 235 + 235, + 311 ], "properties:10": { "betterquesting:10": { @@ -46576,7 +46648,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r. Keep in mind that §dMending§r does not work on §3Gregtech Tools§r.\n\n", + "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r. Keep in mind that §dMending§r does not work on §3Gregtech Tools§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -46712,7 +46784,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", + "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -46797,13 +46869,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r, or a §2Alloy Blast Smelter§r.\n\n§6Enderium§r doesn\u0027t require much power (running on as little as MV) but it does need a lot of heat and is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.\n\n", + "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r, or a §2Alloy Blast Smelter§r.\n\n§6Enderium§r is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 167, + "Damage:2": 18, "OreDict:8": "", - "id:8": "thermalfoundation:material" + "id:8": "nomilabs:meta_ingot" }, "ignoresview:1": 0, "ismain:1": 1, @@ -47591,7 +47663,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.\n\n", + "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48065,7 +48137,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.\n", + "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48259,7 +48331,7 @@ "0:10": { "Count:3": 1, "Damage:2": 440, - "OreDict:8": "", + "OreDict:8": "questbookLathe", "id:8": "gregtech:machine" } }, @@ -48438,7 +48510,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy.\n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and more information on the §6Stabilizers§r and §6Pylons§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, § the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nIt is recommended to postpone Tier 8 until after you reach the §dCreative Tank§r, as it requires large amounts of §6Awakened Draconium§r.\n\n", + "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy.\n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and more information on the §6Stabilizers§r and §6Pylons§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nIt is recommended to postpone Tier 8 until after you reach the §dCreative Tank§r, as it requires large amounts of §6Awakened Draconium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48517,7 +48589,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis is represented in a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation.§r\n\nNow that you have acquired §6Steel§r, your path to infinite cobblestone awaits! The §6Cobblestone Generator§r continuously outputs cobblestone into adjacent inventories, and can be upgraded to produce it even faster.\n\nCobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Clay§r which is both a reliable source of §6Aluminium§r and very important for automating §bDeep Mob Evolution§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.\n", + "desc:8": "§oThis is represented in a Processing Line. Visit the Processing Lines Tab to have more info, useful tips and a visual representation.§r\n\nNow that you have acquired §6Steel§r, your path to infinite cobblestone awaits! The §6Cobblestone Generator§r continuously outputs cobblestone into adjacent inventories, and can be upgraded to produce it even faster.\n\nCobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Clay§r which is both a reliable source of §6Aluminium§r and very important for automating §bDeep Mob Evolution§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48731,13 +48803,97 @@ } }, "782:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Starting at §5EV§r, 4A Energy and Dynamo hatches are available at each tier. From §1IV§r onwards, 16A hatches will be available.\n\nNote that these hatches will not allow you to \"skip\" tiers! The maximum §erecipe tier§r a multiblock can run is determined by the tier of the hatch. If two hatches of the same tier are in the multiblock, the recipe tier will be increased to the next higher tier.\n\nInstead, these hatches can allow you to overclock recipes you can already do even more. The §eoverclock tier§r is the total EU/t input summed across all hatches.\n\nExamples:\n\n- 2x §7LV§r hatch -\u003e §bMV§r recipe tier, §bMV§r OC tier\n\n- 16A §1IV§r hatch -\u003e §1IV§r recipe tier, §cZPM§r OC tier\n\n- 2x 16A §1IV§r hatch -\u003e §dLuV§r recipe tier, 2A §cZPM§r OC tier\n\nIf in doubt, check the multiblock\u0027s GUI. It will show the max recipe tier, as well as max EU/t for overclocking.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "High Amperage Energy Hatches", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 782, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin25" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1245, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:optional_retrieval" + } + } + }, + "783:10": { "preRequisites:11": [ 897 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aTurbine Rotor§r to go into each §3Rotor Holder§r§r. The Turbine Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Turbine Rotor also has a Durability, which is the number of seconds it will last. These Turbine Rotors are tools, so you can only see one type in JEI, but you can see uses of the Turbine Blade of the material to see its stats. \n\n§aExample: §r§6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", + "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aTurbine Rotor§r to go into each §3Rotor Holder§r. The Turbine Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Turbine Rotor also has a Durability, which is the number of seconds it will last. These Turbine Rotors are tools, so you can only see one type in JEI, but you can see uses of the Turbine Blade of the material to see its stats. \n\n§aExample: §6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48769,7 +48925,7 @@ } } }, - "783:10": { + "784:10": { "preRequisites:11": [ 282 ], @@ -48835,14 +48991,14 @@ } } }, - "784:10": { + "785:10": { "preRequisites:11": [ 72 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Silicone Rubber or Styrene-Butadiene Rubber.\n\n§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§9§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with, but coats wires less efficiently. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.\n\n§2To make Styrene-Butadiene Rubber, you will need to create Raw Styrene-Butadiene Rubber Dust in one of several ways, then mix it with Sulfur in a Chemical Reactor. This produces more liquid than Silicon Rubber, as well as being a more efficient way to coat wires.\n", + "desc:8": "§oNote: this quest accepts Silicone Rubber or Styrene-Butadiene Rubber.\n\n§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with, but coats wires less efficiently. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.\n\n§2To make Styrene-Butadiene Rubber, you will need to create Raw Styrene-Butadiene Rubber Dust in one of several ways, then mix it with Sulfur in a Chemical Reactor. This produces more liquid than Silicon Rubber, as well as being a more efficient way to coat wires.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48915,7 +49071,7 @@ } } }, - "785:10": { + "786:10": { "preRequisiteTypes:7": [ 2 ], @@ -48957,7 +49113,7 @@ } } }, - "786:10": { + "787:10": { "preRequisites:11": [ 81, 272, @@ -48966,7 +49122,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks, or even §aDiamond Tools§r using diamonds from your §3Deep Mob Evolution§r setup.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.\n\n", + "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks, or even §aDiamond Tools§r using diamonds from your §3Deep Mob Evolution§r setup.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49025,14 +49181,14 @@ } } }, - "787:10": { + "788:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.\n", + "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49091,14 +49247,14 @@ } } }, - "788:10": { + "789:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", + "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49169,14 +49325,14 @@ } } }, - "789:10": { + "790:10": { "preRequisites:11": [ 72 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.\n", + "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49235,7 +49391,7 @@ } } }, - "790:10": { + "791:10": { "preRequisites:11": [ 524, 798 @@ -49243,7 +49399,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.\n\n", + "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49308,7 +49464,7 @@ } } }, - "791:10": { + "792:10": { "preRequisites:11": [ 172, 177 @@ -49375,7 +49531,7 @@ } } }, - "792:10": { + "793:10": { "preRequisites:11": [ 27 ], @@ -49447,7 +49603,7 @@ } } }, - "793:10": { + "794:10": { "preRequisites:11": [ 792, 793 @@ -49482,7 +49638,7 @@ "rewards:9": {}, "tasks:9": {} }, - "794:10": { + "795:10": { "preRequisites:11": [ 796 ], @@ -49508,7 +49664,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -49545,10 +49701,28 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 598, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, - "795:10": { + "796:10": { "preRequisites:11": [ 323 ], @@ -49614,7 +49788,7 @@ } } }, - "796:10": { + "797:10": { "preRequisites:11": [ 796 ], @@ -49680,7 +49854,7 @@ } } }, - "797:10": { + "798:10": { "preRequisites:11": [ 675, 676 @@ -49747,7 +49921,7 @@ } } }, - "798:10": { + "799:10": { "preRequisites:11": [ 545, 745 @@ -49819,7 +49993,7 @@ } } }, - "799:10": { + "800:10": { "preRequisites:11": [ 162, 416, @@ -49855,7 +50029,7 @@ "rewards:9": {}, "tasks:9": {} }, - "800:10": { + "801:10": { "preRequisites:11": [ 154 ], @@ -49933,7 +50107,7 @@ } } }, - "801:10": { + "802:10": { "preRequisites:11": [ 325 ], @@ -49999,7 +50173,7 @@ } } }, - "802:10": { + "803:10": { "preRequisiteTypes:7": [ 2 ], @@ -50009,7 +50183,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r.\n\nTo create a portal, you must place a §aBed§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r You can use the §e/sethome§r command to register where your house is, and §e/home§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r§r. §6Skeleton Skulls§r would be the way to go in that case.", + "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r.\n\nTo create a portal, you must place a §aBed§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r You can use the §e/sethome§r command to register where your house is, and §e/home§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r. §6Skeleton Skulls§r would be the way to go in that case.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50080,7 +50254,7 @@ } } }, - "803:10": { + "804:10": { "preRequisites:11": [ 107, 286 @@ -50088,7 +50262,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Assembly Line§r is a particularly unusual multiblock from an automation standpoint. Up until now, it has been possible to dump ingredients into a single input bus. Clearly, this won\u0027t work for the Assembly line, since it has a whole bunch of ULV inputs buses that hold one item stack each.\n\nYou might be tempted to dump everything into a chest and route items around to specific buses with §aItem Conduits§r. You\u0027ll probably find this to be slow, prone to jamming, and inflexible when you want to run different recipes.\n\nIf you\u0027ve unlocked §3The Empowerer§r, you might have considered §aPhantomfaces§r. These would certainly be an improvement over item conduits, but there\u0027s an even better solution.\n\nEnter §aItem Laser Relays§r§r: these handy tools from §bActually Additions§r allow you to create a virtual inventory out of multiple real ones; that is, you can use them to make other automation think that all of the input buses are the same inventory.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r Take this into account when placing them.\n\nTo start, place a laser on each of the input buses. Then, place the §aItem Interface§r adjacent to the laser on the first input bus. This will serve as the access point to the virtual inventory where you can connect things like an § §aME Interface§r.\n\nIf you don\u0027t have enough space in a normal pattern, try using the §6Extended Processing Pattern Terminal§r!\n\nTake your §aLaser Wrench§r and right click the first laser relay, then the second laser relay, to link them together. Repeat this with the second and third relays, third and fourth relays, etc. until they have all been linked together. Now you have a laser network virtualizing all of the input buses!\n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nRemember to always use §eBlocking Mode§r when connecting the laser network to on-demand crafting. If you don\u0027t use Blocking Mode, you are likely to accidentally craft something else and jam your Assembly Line.", + "desc:8": "The §3Assembly Line§r is a particularly unusual multiblock from an automation standpoint. Up until now, it has been possible to dump ingredients into a single input bus. Clearly, this won\u0027t work for the Assembly line, since it has a whole bunch of ULV inputs buses that hold one item stack each.\n\nYou might be tempted to dump everything into a chest and route items around to specific buses with §aItem Conduits§r. You\u0027ll probably find this to be slow, prone to jamming, and inflexible when you want to run different recipes.\n\nIf you\u0027ve unlocked §3The Empowerer§r, you might have considered §aPhantomfaces§r. These would certainly be an improvement over item conduits, but there\u0027s an even better solution.\n\nEnter §aItem Laser Relays§r: these handy tools from §bActually Additions§r allow you to create a virtual inventory out of multiple real ones; that is, you can use them to make other automation think that all of the input buses are the same inventory.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r Take this into account when placing them.\n\nTo start, place a laser on each of the input buses. Then, place the §aItem Interface§r adjacent to the laser on the first input bus. This will serve as the access point to the virtual inventory where you can connect things like an §aME Interface§r.\n\nIf you don\u0027t have enough space in a normal pattern, try using the §6Extended Processing Pattern Terminal§r!\n\nTake your §aLaser Wrench§r and right click the first laser relay, then the second laser relay, to link them together. Repeat this with the second and third relays, third and fourth relays, etc. until they have all been linked together. Now you have a laser network virtualizing all of the input buses!\n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nRemember to always use §eBlocking Mode§r when connecting the laser network to on-demand crafting. If you don\u0027t use Blocking Mode, you are likely to accidentally craft something else and jam your Assembly Line.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50159,14 +50333,14 @@ } } }, - "804:10": { + "805:10": { "preRequisites:11": [ 818 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.\n", + "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50227,7 +50401,7 @@ } } }, - "805:10": { + "806:10": { "preRequisites:11": [ 166, 226 @@ -50271,7 +50445,7 @@ } } }, - "806:10": { + "807:10": { "preRequisites:11": [ 163, 413 @@ -50334,7 +50508,7 @@ } } }, - "807:10": { + "808:10": { "preRequisiteTypes:7": [ 2 ], @@ -50376,14 +50550,14 @@ } } }, - "808:10": { + "809:10": { "preRequisites:11": [ 367 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Simulation Supercomputer§r is a multiblock structure that performs §bDeep Mob Evolution§r simulations like the §3Simulation Chamber§r, but is capable of overclocking these simulations to incredible speeds.\n\nOne of these structures can perform the equivalent work of hundreds of individual Simulation Chambers more efficiently. This will make it far easier to generate pristine matter you\u0027ll need for things like §6Dragon Lair Data§r. You\u0027ll probably need several §3Loot Fabricators§r to keep up with it.\n\nThe data model you place in the input bus will §2have a fixed 30% chance of producing Pristine matter regardless of its tier. §eOverclocking does not alter the chances of pristines§r: those come at fixed rates per iteration.\n\nAs a §dCreative Tier§r structure, it is rather expensive to make. However, it is an investment that will easily pay for itself as you progress through the endgame. You should strongly consider making one of these with your second §dHeart of a Universe§r.\n", + "desc:8": "The §3Simulation Supercomputer§r is a multiblock structure that performs §bDeep Mob Evolution§r simulations like the §3Simulation Chamber§r, but is capable of overclocking these simulations to incredible speeds.\n\nOne of these structures can perform the equivalent work of hundreds of individual Simulation Chambers more efficiently. This will make it far easier to generate pristine matter you\u0027ll need for things like §6Dragon Lair Data§r. You\u0027ll probably need several §3Loot Fabricators§r to keep up with it.\n\nThe data model you place in the input bus will §2have a fixed 30% chance of producing Pristine matter regardless of its tier. §eOverclocking does not alter the chances of pristines§r: those come at fixed rates per iteration.\n\nAs a §dCreative Tier§r structure, it is rather expensive to make. However, it is an investment that will easily pay for itself as you progress through the endgame. You should strongly consider making one of these with your second §dHeart of a Universe§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50459,7 +50633,7 @@ } } }, - "809:10": { + "810:10": { "preRequisites:11": [ 260, 278, @@ -50528,7 +50702,7 @@ } } }, - "810:10": { + "811:10": { "preRequisiteTypes:7": [ 2 ], @@ -50630,7 +50804,7 @@ } } }, - "811:10": { + "812:10": { "preRequisites:11": [ 94, 505 @@ -50665,7 +50839,7 @@ "rewards:9": {}, "tasks:9": {} }, - "812:10": { + "813:10": { "preRequisites:11": [ 4 ], @@ -50717,14 +50891,14 @@ } } }, - "813:10": { + "814:10": { "preRequisites:11": [ 21 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack!", + "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack. However, at §5EV§r, the Arc Furnace expands to 9 slots.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50801,7 +50975,7 @@ } } }, - "814:10": { + "815:10": { "preRequisites:11": [ 145 ], @@ -50867,7 +51041,7 @@ } } }, - "815:10": { + "816:10": { "preRequisites:11": [ 76, 818 @@ -50875,7 +51049,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.\n", + "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50934,7 +51108,7 @@ } } }, - "816:10": { + "817:10": { "preRequisites:11": [ 752 ], @@ -51024,7 +51198,7 @@ } } }, - "817:10": { + "818:10": { "preRequisites:11": [ 530 ], @@ -51090,7 +51264,7 @@ } } }, - "818:10": { + "819:10": { "preRequisites:11": [ 58 ], @@ -51180,7 +51354,7 @@ } } }, - "819:10": { + "820:10": { "preRequisites:11": [ 72, 78, @@ -51248,7 +51422,7 @@ } } }, - "820:10": { + "821:10": { "preRequisites:11": [ 27 ], @@ -51328,7 +51502,7 @@ } } }, - "821:10": { + "822:10": { "preRequisites:11": [ 82 ], @@ -51394,7 +51568,7 @@ } } }, - "822:10": { + "823:10": { "preRequisites:11": [ 727 ], @@ -51460,7 +51634,7 @@ } } }, - "823:10": { + "824:10": { "preRequisites:11": [ 96 ], @@ -51526,7 +51700,7 @@ } } }, - "824:10": { + "825:10": { "preRequisites:11": [ 153, 899 @@ -51593,7 +51767,7 @@ } } }, - "825:10": { + "826:10": { "preRequisites:11": [ 825 ], @@ -51677,14 +51851,15 @@ } } }, - "826:10": { + "827:10": { "preRequisites:11": [ + 65, 177 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A rudimentary version of Platinum Group Sludge (PGS) processing existed in the base pack. Here, it is a strong source of the Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum - as well as Gold. All of these elements will be used in IV-tier and above materials.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.\n\nThis is still optional, and you can get §6Ruthenium§r and §6Rhodium§r from §6Osmiridium 80/20 Ore§r and §6Iridosmine 80/20 Ore§r from Microverse adventures instead.", + "desc:8": "The §6Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum§r - are rare materials used in upcoming recipes. §6Ruthenium§r will be required now for the next tier of coils.\n\nThese materials can be obtained from ores exclusive to Microverse missions - §6Laurite Ore§r for Ruthenium, §6Cuprorhodsite Ore§r for Rhodium, and §6Osmiridium Ore§r and §6Iridosmine Ore§r for Osmium and Iridium. However, the yields of these ores from Microverse missions are small, so you should consider processing §6Platinum Group Sludge (PGS)§r for more.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51697,7 +51872,7 @@ "issilent:1": 0, "lockedprogress:1": 0, "name:8": "§2Platinum Group Processing", - "questlogic:8": "AND", + "questlogic:8": "OR", "repeat_relative:1": 1, "repeattime:3": -1, "simultaneous:1": 0, @@ -51737,26 +51912,50 @@ "Damage:2": 93, "OreDict:8": "", "id:8": "gregtech:meta_dust" - }, - "1:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 90, "OreDict:8": "", "id:8": "gregtech:meta_dust" + }, + "1:10": { + "Count:3": 1, + "Damage:2": 75, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + }, + "2:10": { + "Count:3": 1, + "Damage:2": 50, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" } }, - "taskID:8": "bq_standard:retrieval" + "taskID:8": "bq_standard:optional_retrieval" } } }, - "827:10": { + "828:10": { "preRequisites:11": [ 198 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is the highest tier of polymer. It is used in crafting Advanced SMD components, ZPM+ Machine Hulls, among other things.\n\nThis polymer requires at least 14 processing steps to craft. Good luck!", + "desc:8": "This is the highest tier of polymer. It is used in crafting §2Advanced SMD components and ZPM+ Machine Hulls,§r among other things.\n\nThis polymer can require up to §914 steps§r to create from scratch, but multiple steps are able to be skipped through distillation of various liquids. §6Check what steps you can easily skip!§r", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51815,7 +52014,7 @@ } } }, - "828:10": { + "829:10": { "preRequisites:11": [ 779 ], @@ -51881,7 +52080,7 @@ } } }, - "829:10": { + "830:10": { "preRequisites:11": [ 93, 974 @@ -51948,7 +52147,7 @@ } } }, - "830:10": { + "831:10": { "preRequisites:11": [ 830 ], @@ -52014,14 +52213,14 @@ } } }, - "831:10": { + "832:10": { "preRequisites:11": [ 830 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §opull§r fluids from the world location it is attached to, while Export will §opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.\n", + "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §opull§r fluids from the world location it is attached to, while Export will §opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52080,14 +52279,14 @@ } } }, - "832:10": { + "833:10": { "preRequisites:11": [ 830 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §a§lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §a§lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §a§lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §a§lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", + "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52158,7 +52357,7 @@ } } }, - "833:10": { + "834:10": { "preRequisites:11": [ 96 ], @@ -52224,7 +52423,7 @@ } } }, - "834:10": { + "835:10": { "preRequisites:11": [ 93, 974 @@ -52291,7 +52490,7 @@ } } }, - "835:10": { + "836:10": { "preRequisites:11": [ 147, 259 @@ -52358,7 +52557,7 @@ } } }, - "836:10": { + "837:10": { "preRequisites:11": [ 91, 836 @@ -52425,7 +52624,7 @@ } } }, - "837:10": { + "838:10": { "preRequisites:11": [ 194, 526 @@ -52433,7 +52632,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Systems on Chip can be engraved with HV power and Glowstone Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", + "desc:8": "§2Systems on Chip can be engraved with HV power and Phosphorus Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52452,7 +52651,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -52480,6 +52679,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 572, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -52492,10 +52709,10 @@ } } }, - "838:10": { + "839:10": { "preRequisites:11": [ - 904, - 882 + 882, + 904 ], "properties:10": { "betterquesting:10": { @@ -52559,16 +52776,16 @@ } } }, - "839:10": { + "840:10": { "preRequisiteTypes:7": [ + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 791, - 841, - 325 + 841 ], "properties:10": { "betterquesting:10": { @@ -52632,7 +52849,7 @@ } } }, - "840:10": { + "841:10": { "preRequisites:11": [ 312 ], @@ -52698,7 +52915,7 @@ } } }, - "841:10": { + "842:10": { "preRequisites:11": [ 242, 327 @@ -52765,7 +52982,7 @@ } } }, - "842:10": { + "843:10": { "preRequisites:11": [ 323 ], @@ -52861,7 +53078,7 @@ } } }, - "843:10": { + "844:10": { "preRequisites:11": [ 845, 847 @@ -52869,7 +53086,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.\n", + "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -52928,7 +53145,7 @@ } } }, - "844:10": { + "845:10": { "preRequisites:11": [ 324, 843 @@ -52995,14 +53212,14 @@ } } }, - "845:10": { + "846:10": { "preRequisites:11": [ 844 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§6Naquadria§o§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", + "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§6Naquadria§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -53061,7 +53278,7 @@ } } }, - "846:10": { + "847:10": { "preRequisites:11": [ 324, 843 @@ -53128,7 +53345,7 @@ } } }, - "847:10": { + "848:10": { "preRequisites:11": [ 847 ], @@ -53194,14 +53411,14 @@ } } }, - "848:10": { + "849:10": { "preRequisites:11": [ 198 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6IV Assembling Machine§r is required for§2 Advanced SMD components§r.\n\nConsider upgrading to a §6Large Assembling Factory§r, which is easier to upgrade and can accept Parallel Control Hatches. ", + "desc:8": "The §6IV Assembling Machine§r is required for§2 Advanced SMD components§r.\n\nConsider upgrading to a §6Large Assembling Factory§r, which is easier to upgrade and can accept Parallel Control Hatches. The §6Large Assembing Factory§r §ccannot be recipe tier overclocked§r, as it only accepts one Energy hatch. You will need to craft higher tier standard Assembling Machines for some higher tier items.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -53278,7 +53495,7 @@ } } }, - "849:10": { + "850:10": { "preRequisites:11": [ 828, 841, @@ -53371,7 +53588,7 @@ } } }, - "850:10": { + "851:10": { "preRequisites:11": [ 312 ], @@ -53437,7 +53654,7 @@ } } }, - "851:10": { + "852:10": { "preRequisites:11": [ 677 ], @@ -53503,10 +53720,10 @@ } } }, - "852:10": { + "853:10": { "preRequisites:11": [ - 827, - 311 + 311, + 827 ], "properties:10": { "betterquesting:10": { @@ -53600,7 +53817,7 @@ } } }, - "853:10": { + "854:10": { "preRequisites:11": [ 196 ], @@ -53666,7 +53883,7 @@ } } }, - "854:10": { + "855:10": { "preRequisites:11": [ 607 ], @@ -53732,7 +53949,7 @@ } } }, - "855:10": { + "856:10": { "preRequisites:11": [ 855 ], @@ -53758,7 +53975,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -53795,10 +54012,28 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 599, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, - "856:10": { + "857:10": { "preRequisites:11": [ 339 ], @@ -53882,7 +54117,7 @@ } } }, - "857:10": { + "858:10": { "preRequisites:11": [ 255, 857 @@ -53890,7 +54125,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r, and §6Red Alloy§r has a discount from 4 redstone per alloy, to 1 and a half.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §e§eConductive Iron§r§r, and §e§eDark Steel§r§r.", + "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r, and §6Red Alloy§r has a discount from 4 redstone per alloy, to 1 and a half.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §eConductive Iron§r, and §eDark Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -53961,7 +54196,7 @@ } } }, - "858:10": { + "859:10": { "preRequisites:11": [ 198, 858 @@ -54028,7 +54263,7 @@ } } }, - "859:10": { + "860:10": { "preRequisites:11": [ 531, 826, @@ -54120,7 +54355,7 @@ } } }, - "860:10": { + "861:10": { "preRequisites:11": [ 535, 848 @@ -54193,7 +54428,7 @@ } } }, - "861:10": { + "862:10": { "preRequisites:11": [ 727 ], @@ -54259,7 +54494,7 @@ } } }, - "862:10": { + "863:10": { "preRequisites:11": [ 727 ], @@ -54325,7 +54560,7 @@ } } }, - "863:10": { + "864:10": { "preRequisites:11": [ 827 ], @@ -54391,7 +54626,7 @@ } } }, - "864:10": { + "865:10": { "preRequisites:11": [ 827 ], @@ -54457,7 +54692,7 @@ } } }, - "865:10": { + "866:10": { "preRequisites:11": [ 727 ], @@ -54523,7 +54758,7 @@ } } }, - "866:10": { + "867:10": { "preRequisites:11": [ 727 ], @@ -54589,7 +54824,7 @@ } } }, - "867:10": { + "868:10": { "preRequisites:11": [ 234 ], @@ -54655,7 +54890,7 @@ } } }, - "868:10": { + "869:10": { "preRequisites:11": [ 139 ], @@ -54721,7 +54956,7 @@ } } }, - "869:10": { + "870:10": { "preRequisites:11": [ 139 ], @@ -54787,7 +55022,7 @@ } } }, - "870:10": { + "871:10": { "preRequisites:11": [ 139 ], @@ -54853,7 +55088,7 @@ } } }, - "871:10": { + "872:10": { "preRequisites:11": [ 325 ], @@ -54919,7 +55154,7 @@ } } }, - "872:10": { + "873:10": { "preRequisites:11": [ 287 ], @@ -54985,7 +55220,7 @@ } } }, - "873:10": { + "874:10": { "preRequisites:11": [ 727 ], @@ -55051,7 +55286,7 @@ } } }, - "874:10": { + "875:10": { "preRequisites:11": [ 6 ], @@ -55117,7 +55352,7 @@ } } }, - "875:10": { + "876:10": { "preRequisites:11": [ 196 ], @@ -55183,7 +55418,7 @@ } } }, - "876:10": { + "877:10": { "preRequisites:11": [ 287 ], @@ -55249,7 +55484,7 @@ } } }, - "877:10": { + "878:10": { "preRequisites:11": [ 847 ], @@ -55315,7 +55550,7 @@ } } }, - "878:10": { + "879:10": { "preRequisites:11": [ 323 ], @@ -55381,14 +55616,14 @@ } } }, - "879:10": { + "880:10": { "preRequisites:11": [ 397 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Configurable to output any number of GT Volts and Amps.", + "desc:8": "An upgrade from the §6Creative RF Source§r, this can be configured to output any amount of GT Volts and Amps.\n\nThis can also connect to a §bLaser Network§r directly!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -55434,7 +55669,7 @@ } } }, - "880:10": { + "881:10": { "preRequisites:11": [ 153 ], @@ -55496,7 +55731,7 @@ } } }, - "881:10": { + "882:10": { "preRequisites:11": [ 325, 750 @@ -55531,7 +55766,7 @@ "rewards:9": {}, "tasks:9": {} }, - "882:10": { + "883:10": { "preRequisites:11": [ 885 ], @@ -55597,7 +55832,7 @@ } } }, - "883:10": { + "884:10": { "preRequisites:11": [ 288 ], @@ -55663,7 +55898,7 @@ } } }, - "884:10": { + "885:10": { "preRequisites:11": [ 749 ], @@ -55729,7 +55964,7 @@ } } }, - "885:10": { + "886:10": { "preRequisites:11": [ 89 ], @@ -55795,7 +56030,7 @@ } } }, - "886:10": { + "887:10": { "preRequisites:11": [ 165 ], @@ -55861,7 +56096,7 @@ } } }, - "887:10": { + "888:10": { "preRequisites:11": [ 161, 166, @@ -55929,7 +56164,7 @@ } } }, - "888:10": { + "889:10": { "preRequisites:11": [ 827 ], @@ -55963,7 +56198,7 @@ "rewards:9": {}, "tasks:9": {} }, - "889:10": { + "890:10": { "preRequisites:11": [ 56 ], @@ -56002,7 +56237,7 @@ } } }, - "890:10": { + "891:10": { "preRequisites:11": [ 94 ], @@ -56064,7 +56299,7 @@ } } }, - "891:10": { + "892:10": { "preRequisites:11": [ 541 ], @@ -56143,7 +56378,7 @@ } } }, - "892:10": { + "893:10": { "preRequisites:11": [ 3 ], @@ -56182,7 +56417,7 @@ } } }, - "893:10": { + "894:10": { "preRequisites:11": [ 147 ], @@ -56248,7 +56483,7 @@ } } }, - "894:10": { + "895:10": { "preRequisites:11": [ 88, 894 @@ -56321,7 +56556,7 @@ } } }, - "895:10": { + "896:10": { "preRequisites:11": [ 6 ], @@ -56387,15 +56622,16 @@ } } }, - "896:10": { + "897:10": { "preRequisites:11": [ + 52, 830, 896 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2With Silver, LPICs, NaK, and an HV Assembler, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.", + "desc:8": "With §6Silver, LPICs§r, §9NaK§r, and an §6HV Assembler§r, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.\n\nLook out for a new more efficient EV-tier recipe for §6Steel§r in the EBF.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -56454,7 +56690,7 @@ } } }, - "897:10": { + "898:10": { "preRequisites:11": [ 93, 891 @@ -56527,7 +56763,7 @@ } } }, - "898:10": { + "899:10": { "preRequisites:11": [ 71 ], @@ -56593,7 +56829,7 @@ } } }, - "899:10": { + "900:10": { "preRequisites:11": [ 888 ], @@ -56659,7 +56895,7 @@ } } }, - "900:10": { + "901:10": { "preRequisites:11": [ 179, 888 @@ -56694,14 +56930,14 @@ "rewards:9": {}, "tasks:9": {} }, - "901:10": { + "902:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Tablet device you get now is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, and §9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",\n", + "desc:8": "§2The Tablet device you get now is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, and §9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -56805,7 +57041,7 @@ } } }, - "902:10": { + "903:10": { "preRequisites:11": [ 59, 72 @@ -56813,7 +57049,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Cupronickel Coils§r form part of the structure of a few multiblocks. Presently, those are the §3Electric Blast Furnace§r and §3Pyrolyse Oven§r. Each tier of coil unlocks new recipes and provides various bonuses to the multiblock they are attached to.\n\nCupronickel Coils are produced in the §3Assembler§r with §62x Cupronickel Wire§r, §6Bronze Foil§r, and §9Tin Alloy fluid§r.\n\nFor now, you need 16 coils for the §3Electric Blast Furnace§r and 16 for the §3Pyrolyse Oven§r. That totals to 176 Copper, 128 Nickel, 32 Tin, and 16 Iron.", + "desc:8": "§6Cupronickel Coils§r form part of the structure of a few multiblocks. Presently, those are the §3Electric Blast Furnace§r and §3Pyrolyse Oven§r. Each tier of coil unlocks new recipes and provides various bonuses to the multiblock they are attached to.\n\nCupronickel Coils are produced in the §3Assembler§r with §62x Cupronickel Wire§r, §6Bronze Foil§r, and §9Tin Alloy Fluid§r.\n\nFor now, you need 16 coils for the §3Electric Blast Furnace§r and 16 for the §3Pyrolyse Oven§r. That totals to §6176 Copper§r, §6128 Nickel§r, §632 Tin§r, and §616 Iron§r.\n\nHave fun mining!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -56872,7 +57108,7 @@ } } }, - "903:10": { + "904:10": { "preRequisites:11": [ 339, 914 @@ -56939,7 +57175,7 @@ } } }, - "904:10": { + "905:10": { "preRequisites:11": [ 904 ], @@ -57005,14 +57241,14 @@ } } }, - "905:10": { + "906:10": { "preRequisites:11": [ 535 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily.", + "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily. \n\nNote that like the Large Assembling Machine, the Large Circuit Assembler §ccannot use more than one Energy Hatch§2, preventing it from recipe tier overclocking.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -57095,7 +57331,7 @@ } } }, - "906:10": { + "907:10": { "preRequisites:11": [ 533, 906 @@ -57130,7 +57366,7 @@ "rewards:9": {}, "tasks:9": {} }, - "907:10": { + "908:10": { "preRequisites:11": [ 196 ], @@ -57164,7 +57400,7 @@ "rewards:9": {}, "tasks:9": {} }, - "908:10": { + "909:10": { "preRequisiteTypes:7": [ 2 ], @@ -57245,7 +57481,7 @@ } } }, - "909:10": { + "910:10": { "preRequisites:11": [ 527, 827 @@ -57312,7 +57548,7 @@ } } }, - "910:10": { + "911:10": { "preRequisites:11": [ 38 ], @@ -57378,14 +57614,14 @@ } } }, - "911:10": { + "912:10": { "preRequisites:11": [ 3 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §2CEu§r§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDME§r for easy infinite resources\n- §6Nomicoins§r don\u0027t exist\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", + "desc:8": "The §2CEu§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDME§r for easy infinite resources\n- §6Nomicoins§r don\u0027t exist\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -57417,7 +57653,7 @@ } } }, - "912:10": { + "913:10": { "preRequisites:11": [ 401 ], @@ -57456,7 +57692,7 @@ } } }, - "913:10": { + "914:10": { "preRequisites:11": [ 255, 286, @@ -57526,7 +57762,7 @@ } } }, - "914:10": { + "915:10": { "preRequisites:11": [ 828 ], @@ -57560,7 +57796,7 @@ "rewards:9": {}, "tasks:9": {} }, - "915:10": { + "916:10": { "preRequisites:11": [ 253 ], @@ -57594,7 +57830,7 @@ "rewards:9": {}, "tasks:9": {} }, - "916:10": { + "917:10": { "preRequisites:11": [ 524 ], @@ -57628,11 +57864,11 @@ "rewards:9": {}, "tasks:9": {} }, - "917:10": { + "918:10": { "preRequisites:11": [ - 729, + 100, 494, - 100 + 729 ], "properties:10": { "betterquesting:10": { @@ -57696,7 +57932,7 @@ } } }, - "918:10": { + "919:10": { "preRequisites:11": [ 108 ], @@ -57762,7 +57998,7 @@ } } }, - "919:10": { + "920:10": { "preRequisites:11": [ 279 ], @@ -57796,7 +58032,7 @@ "rewards:9": {}, "tasks:9": {} }, - "920:10": { + "921:10": { "preRequisiteTypes:7": [ 2 ], @@ -57838,7 +58074,7 @@ } } }, - "921:10": { + "922:10": { "preRequisites:11": [ 885 ], @@ -57904,7 +58140,7 @@ } } }, - "922:10": { + "923:10": { "preRequisiteTypes:7": [ 2 ], @@ -57946,15 +58182,15 @@ } } }, - "923:10": { + "924:10": { "preRequisites:11": [ - 971, - 728 + 728, + 971 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Alloy Smelter at voltage §lLV§r§o or higher.§r\n\nThe final step. Combine §6Pulsating Dust§r and §6Resonant Clathrate§r to make §6Pulsating Polymer Clay§r. \n\nTake note that a §3§3Chemical Reactor§r making §6Resonant Clathrate§r will supply 1 §3Alloy Smelter§r of the same tier, and that one §bMV §3Alloy Smelter§r making §6Pulsating Polymer Clay§r supports 10.03 §3Simulation Chambers§r, with each higher tier doubling the amount of §3Simulation Chambers§r it supports.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Alloy Smelter at voltage §lLV§o or higher.§r\n\nThe final step. Combine §6Pulsating Dust§r and §6Resonant Clathrate§r to make §6Pulsating Polymer Clay§r. \n\nTake note that a §3Chemical Reactor§r making §6Resonant Clathrate§r will supply 1 §3Alloy Smelter§r of the same tier, and that one §bMV §3Alloy Smelter§r making §6Pulsating Polymer Clay§r supports 10.03 §3Simulation Chambers§r, with each higher tier doubling the amount of §3Simulation Chambers§r it supports.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58004,16 +58240,16 @@ } } }, - "924:10": { + "925:10": { "preRequisites:11": [ - 930, + 728, 927, - 728 + 930 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§r§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58063,16 +58299,16 @@ } } }, - "925:10": { + "926:10": { "preRequisites:11": [ + 728, 933, - 934, - 728 + 934 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lMV§r§o or higher.§r\n\nCombine your §6Quartz§r and §6Resonant Ender§r to make §6Resonant Clathrate§r. One §3Electrolyser§r making §6Quartz§r supports one §3Chemical Reactor §rof the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Chemical Reactor at voltage §lMV§o or higher.§r\n\nCombine your §6Quartz§r and §6Resonant Ender§r to make §6Resonant Clathrate§r. One §3Electrolyser§r making §6Quartz§r supports one §3Chemical Reactor §rof the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58122,15 +58358,15 @@ } } }, - "926:10": { + "927:10": { "preRequisites:11": [ - 928, - 728 + 728, + 928 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58180,15 +58416,15 @@ } } }, - "927:10": { + "928:10": { "preRequisites:11": [ - 929, - 728 + 728, + 929 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58238,15 +58474,15 @@ } } }, - "928:10": { + "929:10": { "preRequisites:11": [ - 931, - 728 + 728, + 931 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58296,12 +58532,12 @@ } } }, - "929:10": { + "930:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58351,7 +58587,7 @@ } } }, - "930:10": { + "931:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -58406,15 +58642,15 @@ } } }, - "931:10": { + "932:10": { "preRequisites:11": [ - 928, - 728 + 728, + 928 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§r§o or higher, or an Arc Furnace at voltage §lLV§r§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§o or higher, or an Arc Furnace at voltage §lLV§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58464,15 +58700,15 @@ } } }, - "932:10": { + "933:10": { "preRequisites:11": [ - 932, - 728 + 728, + 932 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58522,15 +58758,15 @@ } } }, - "933:10": { + "934:10": { "preRequisites:11": [ - 935, - 728 + 728, + 935 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires an Extractor of tier §lLV§r§o or higher.§r\n\nMelt your §6Ender Pearls§r into §6Resonant Ender§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires an Extractor of tier §lLV§o or higher.§r\n\nMelt your §6Ender Pearls§r into §6Resonant Ender§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58584,7 +58820,7 @@ } } }, - "934:10": { + "935:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -58639,15 +58875,15 @@ } } }, - "935:10": { + "936:10": { "preRequisites:11": [ - 926, - 728 + 728, + 926 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§r§o or higher.§r§r§r\n\nSmelt your §6Resonant Clathrate§r into §6Pulsating Dust§r. If you\u0027re using a §3Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. You might want to keep it as a §3Electric Furnace§r, depending on your circumstance. \n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Resonant Clathrate.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§o or higher.§r\n\nSmelt your §6Resonant Clathrate§r into §6Pulsating Dust§r. If you\u0027re using a §3Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. You might want to keep it as a §3Electric Furnace§r, depending on your circumstance. \n\n\n\nYou might have noticed that all quests in this line complete automatically via §6Resonant Clathrate§r instead of §6Pulsating Polymer Clay§r. This is the case as it follows the §oResonant Clathrate§r quest in §oSimulating Mobs§r, and you will probably make §6Pulsating Polymer Clay§r via §6Uraninite§r before making a passive setup via §6Resonant Clathrate§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58697,7 +58933,7 @@ } } }, - "936:10": { + "937:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -58752,14 +58988,14 @@ } } }, - "937:10": { + "938:10": { "preRequisites:11": [ 937 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Gravel.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Gravel.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Cobblestone§r into §6Gravel§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58809,14 +59045,14 @@ } } }, - "938:10": { + "939:10": { "preRequisites:11": [ 938 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Sand.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sand.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Gravel§r into §6Sand§r. Pretty much just another step of the §eCobbleworks§r, although it is used in §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58866,14 +59102,14 @@ } } }, - "939:10": { + "940:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Dust.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r. Used for nothing, apart from turning into §6Clay§r and §6Netherrack§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Dust.§r\n\n§oThis step requires a Forge Hammer at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Dust§r. Used for nothing, apart from turning into §6Clay§r and §6Netherrack§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58923,7 +59159,7 @@ } } }, - "940:10": { + "941:10": { "preRequisites:11": [ 940, 942 @@ -58931,7 +59167,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Clay.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§r§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r Turns into many useful resources.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Clay.§r\n\n§oThis step requires a Chemical Reactor at voltage §lLV§o or higher.§r\n\nCombine your §6Dust§r and some §6Water§r to make §6Clay§r.§r Turns into many useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -58981,12 +59217,12 @@ } } }, - "941:10": { + "942:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Water.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\nIn this case, you\u0027ll need §9Water§r for §6Clay§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Water.§r\n\nYes, there\u0027s a quest for §9Water§r.\n\n§9Water§r can be achieved in many ways, but the most notable are: §bNuclearCraft §6Infinite Water Sources§r, which are very slow, but cheap, §bEIO §6Endervoirs§r, which are a bit more expensive but way faster, §bGregTech §6Infinite Water Covers§r, which is much more expensive, but is a cover, therefore saving space, and makes water 16x faster than §6Endervoirs§r, and §bThermal §6Aqueous Accumulators§r, which are more expensive, and are similar to §6Infinite Water Covers§r, but is a block, meaning you can use it for other mod\u0027s machines, not just §bGregTech§r.\n\nRight now, you should probably use the §6Endervoirs§r.\n\nIn this case, you\u0027ll need §9Water§r for §6Clay§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59032,12 +59268,12 @@ } } }, - "942:10": { + "943:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Lava.§r\n\n§6Lava§r can be achieved in three main ways. The first is using a §3Chemical Reactor§r to turn §6Magma Blocks§r into §6Lava§r. The second is using §bActually Additions §6Lava Factories§r. These are quite slow. The final notable way is using a §bGregTech §6Fluid Drill§r in the Nether above a §6Lava§r vein.\n\nIn this case, you\u0027ll need §6Lava§r for §6Netherrack§r. You won\u0027t need much, although §6Lava§r can also be centrifuged for useful resources, and will be used heavily in the End Game for §6Lava Infused Crystals§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Lava.§r\n\n§6Lava§r can be achieved in three main ways. The first is using a §3Chemical Reactor§r to turn §6Magma Blocks§r into §6Lava§r. The second is using §bActually Additions §6Lava Factories§r. These are quite slow. The final notable way is using a §bGregTech §6Fluid Drill§r in the Nether above a §6Lava§r vein.\n\nIn this case, you\u0027ll need §6Lava§r for §6Netherrack§r. You won\u0027t need much, although §6Lava§r can also be centrifuged for useful resources, and will be used heavily in the End Game for §6Lava Infused Crystals§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59083,7 +59319,7 @@ } } }, - "943:10": { + "944:10": { "preRequisites:11": [ 940, 943 @@ -59091,7 +59327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Netherrack.\n\nThis step requires a Chemical Reactor at voltage §lLV§r§o or higher.§r\n\nCombine your §6Dust§r and §6Lava§r into §6Netherrack§r. Pretty much used for nothing, apart from your first §6Hellish Matter§r and §6Netherrack Dust§r. No need to passive this.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Netherrack.\n\nThis step requires a Chemical Reactor at voltage §lLV§o or higher.§r\n\nCombine your §6Dust§r and §6Lava§r into §6Netherrack§r. Pretty much used for nothing, apart from your first §6Hellish Matter§r and §6Netherrack Dust§r. No need to passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59141,14 +59377,14 @@ } } }, - "944:10": { + "945:10": { "preRequisites:11": [ 944 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Netherrack Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Netherrack§r into §6Netherrack Dust§r. Used for nothing apart from §6Nether Cakes§r. No need to passive this.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Netherrack Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Netherrack§r into §6Netherrack Dust§r. Used for nothing apart from §6Nether Cakes§r. No need to passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59198,14 +59434,14 @@ } } }, - "945:10": { + "946:10": { "preRequisites:11": [ 941 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Balls.§r\n\nCraft your §6Clay§r to make §6Clay Balls§r.§r You can also use §3Compacting Drawers§r. Used for §6Conduit Binders§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Balls.§r\n\nCraft your §6Clay§r to make §6Clay Balls§r.§r You can also use §3Compacting Drawers§r. Used for §6Conduit Binders§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59255,14 +59491,14 @@ } } }, - "946:10": { + "947:10": { "preRequisites:11": [ 941 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Clay§r to make §6Clay Dust§r.§r Turns into many useful resources.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Clay Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Clay§r to make §6Clay Dust§r.§r Turns into many useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59312,14 +59548,14 @@ } } }, - "947:10": { + "948:10": { "preRequisites:11": [ 947 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Sodium, Silicon, Lithium and Aluminium.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nSplit your §6Clay Dust§r to make §6Sodium Dust§r, §6Silicon Dust§r, §6Lithium Dust§r, and §6Aluminium Dust§r.§r This is extremely important to passive, as you will need a lot of these resources, and this is the best way to get them.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sodium, Silicon, Lithium and Aluminium.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nSplit your §6Clay Dust§r to make §6Sodium Dust§r, §6Silicon Dust§r, §6Lithium Dust§r, and §6Aluminium Dust§r.§r This is extremely important to passive, as you will need a lot of these resources, and this is the best way to get them.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 0, @@ -59387,14 +59623,14 @@ } } }, - "948:10": { + "949:10": { "preRequisites:11": [ 937 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Stone.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§r§o or higher.§r\n\nMainly used for decorational blocks. Still part of §eCobbleworks§r I guess.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Stone.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, or a Electric Furnace at voltage §lLV§o or higher.§r\n\nMainly used for decorational blocks. Still part of §eCobbleworks§r I guess.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59444,14 +59680,14 @@ } } }, - "949:10": { + "950:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Glass.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§r§o or higher, or an Arc Furnace at voltage §lLV§r§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Glass.§r\n\n§oThis step requires a Furnace or an upgraded Furnace, a Electric Furnace at voltage §lLV§o or higher, or an Arc Furnace at voltage §lLV§o or higher.§r\n\nSmelt your §6Sand§r into §6Glass§r. If you\u0027re using a §3Electric Furnace§r to smelt it, it\u0027s more efficient to use the upgraded §3Furnaces§r, such as §3Iron Furnaces§r. You can fuel them with §6Sugar Cane§r. The §3Arc Furnace§r doubles your glass though. Later, once you unlock them, §3Multi Smelters§r will be the best for this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59501,14 +59737,14 @@ } } }, - "950:10": { + "951:10": { "preRequisites:11": [ 950 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or achieving Quartz.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier. You will need a lot of §6Quartz§r, so its crucial that you passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or achieving Quartz.§r\n\n§oThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nBreak up your §6Sand§r into §6Quartz§r. An §3Arc Furnace§r making §6Glass§r supports 2.5 §3Electrolysers§r of the same tier. You will need a lot of §6Quartz§r, so its crucial that you passive this.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59558,16 +59794,16 @@ } } }, - "951:10": { + "952:10": { "preRequisites:11": [ - 757, + 150, 174, - 150 + 757 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Ender Air§r, collected from a §3Gas Collector§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Ender Air§r.\n\n§9Liquid Ender Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Nether Air give different useful components too.\n", + "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Ender Air§r, collected from a §3Gas Collector§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Ender Air§r.\n\n§9Liquid Ender Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Nether Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59626,16 +59862,16 @@ } } }, - "952:10": { + "953:10": { "preRequisites:11": [ - 780, 150, - 174 + 174, + 780 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Nether Air§r, collected from §3Gas Collectors§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Nether Air§r.\n\n§9Liquid Nether Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Ender Air give different useful components too.\n", + "desc:8": "§2This is new to CEu! Before, you could only distil Liquid Air.\n\n§9Nether Air§r, collected from §3Gas Collectors§r, can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Nether Air§r.\n\n§9Liquid Nether Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Air and Liquid Ender Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59694,7 +59930,7 @@ } } }, - "953:10": { + "954:10": { "preRequisites:11": [ 263, 267 @@ -59729,7 +59965,7 @@ "rewards:9": {}, "tasks:9": {} }, - "954:10": { + "955:10": { "preRequisites:11": [ 539 ], @@ -59763,7 +59999,7 @@ "rewards:9": {}, "tasks:9": {} }, - "955:10": { + "956:10": { "preRequisites:11": [ 328 ], @@ -59797,14 +60033,14 @@ "rewards:9": {}, "tasks:9": {} }, - "956:10": { + "957:10": { "preRequisites:11": [ 950 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Glass Dust.\n\nThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Glass§r into §6Glass Dust§r. Used for nothing, apart from §6Silicon Dioxide Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Glass Dust.\n\nThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Glass§r into §6Glass Dust§r. Used for nothing, apart from §6Silicon Dioxide Dust§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59854,14 +60090,14 @@ } } }, - "957:10": { + "958:10": { "preRequisites:11": [ 957 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Silicon Dioxide Dust.\n\nThis step requires a Centrifuge at voltage §lLV§r§o or higher.§r\n\nSeperate your §6Glass Dust§r into §6Silicon Dioxide Dust§r. Can be electrolysed into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Silicon Dioxide Dust.\n\nThis step requires a Centrifuge at voltage §lLV§o or higher.§r\n\nSeperate your §6Glass Dust§r into §6Silicon Dioxide Dust§r. Can be electrolysed into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59911,14 +60147,14 @@ } } }, - "958:10": { + "959:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Quartz Sand.\n\nThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Sand§r into §6Quartz Sand§r. Can be electrolysed into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Quartz Sand.\n\nThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Sand§r into §6Quartz Sand§r. Can be centrifuged into useful resources.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -59968,14 +60204,14 @@ } } }, - "959:10": { + "960:10": { "preRequisites:11": [ 959 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Sand.\n\nThis step requires a Centrifuge at voltage §lLV§r§o or higher.§r\n\nSeperate your §6Quartz Sand§r into §6Quartzite Dust§r and §6Certus Quartz Dust§r. This is a good renewable source of §6Certus Quartz§r, which you need for §bApplied Energistics 2§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sand.\n\nThis step requires a Centrifuge at voltage §lLV§o or higher.§r\n\nSeperate your §6Quartz Sand§r into §6Quartzite Dust§r and §6Certus Quartz Dust§r. This is a good renewable source of §6Certus Quartz§r, which you need for §bApplied Energistics 2§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60031,14 +60267,14 @@ } } }, - "960:10": { + "961:10": { "preRequisites:11": [ 958 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Oxygen.\n\nThis step requires a Electrolyser at voltage §lLV§r§o or higher.§r\n\nSplit your §6Silicon Dioxide Dust§r into §6Silicon Dust and Oxygen§r. This is the best source of Early Game §6Oxygen§r, although distilling §6Liquid Air§r may be better later, depending on your situation.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Oxygen.\n\nThis step requires a Electrolyser at voltage §lLV§o or higher.§r\n\nSplit your §6Silicon Dioxide Dust§r into §6Silicon Dust and Oxygen§r. This is the best source of Early Game §6Oxygen§r, although distilling §6Liquid Air§r may be better later, depending on your situation.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60084,7 +60320,7 @@ } } }, - "961:10": { + "962:10": { "preRequisites:11": [ 260 ], @@ -60154,14 +60390,14 @@ } } }, - "962:10": { + "963:10": { "preRequisites:11": [ 943 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or achieving Obsidian.§r\n\n§oThis step requires a Fluid Solidifier at voltage §lLV§r§o or higher, or a Rock Breaker at voltage §lHV§r§o or higher.§r\n\nCool down your §6Lava§r into §6Obsidian§r. You\u0027ll need a lot of this, so it\u0027s probably wise to use §3Rock Breakers§r once you hit §6HV§r, as they don\u0027t consume anything to produce §6Obsidian§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or achieving Obsidian.§r\n\n§oThis step requires a Fluid Solidifier at voltage §lLV§o or higher, or a Rock Breaker at voltage §lHV§o or higher.§r\n\nCool down your §6Lava§r into §6Obsidian§r. You\u0027ll need a lot of this, so it\u0027s probably wise to use §3Rock Breakers§r once you hit §6HV§r, as they don\u0027t consume anything to produce §6Obsidian§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60211,14 +60447,14 @@ } } }, - "963:10": { + "964:10": { "preRequisites:11": [ 963 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Obsidian Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Obsidian§r into §6Obsidian Dust§r. You\u0027ll need a lot of this for §6Petrotheum Dust§r.\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Obsidian Dust.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Obsidian§r into §6Obsidian Dust§r. You\u0027ll need a lot of this for §6Petrotheum Dust§r.\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60268,14 +60504,14 @@ } } }, - "964:10": { + "965:10": { "preRequisites:11": [ 939 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§o§oThis quest completes via checkbox or upon achieving Sandstone.§r\n\nCompact your §6Sand§r into §6Sandstone§r. It is recommended to use §3Mechanical Crafters§r or §6Compacting Drawers§r.\n\n\n\n§YYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Sandstone.§r\n\nCompact your §6Sand§r into §6Sandstone§r. It is recommended to use §3Mechanical Crafters§r or §6Compacting Drawers§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60325,14 +60561,14 @@ } } }, - "965:10": { + "966:10": { "preRequisites:11": [ 965 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Saltpeter.§r\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nBreak up your §6Sandstone§r into §6Saltpeter§r. This is probably the best way to get §6Saltpeter§r, which you\u0027ll need a lot for §6Aerotheum Dust§r. You can also get §6Saltpeter§r from §bDeep Mob Evolution§r.\n\nYou can also electrolyse it for §6Potassium§r, although it isn\u0027t recommended because of how easily you can get §6Potassium§r, such as from §6Black Granite §3Processing§r, and how much §6Saltpeter§r it costs.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Saltpeter.§r\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nBreak up your §6Sandstone§r into §6Saltpeter§r. This is probably the best way to get §6Saltpeter§r, which you\u0027ll need a lot for §6Aerotheum Dust§r. You can also get §6Saltpeter§r from §bDeep Mob Evolution§r.\n\nYou can also electrolyse it for §6Potassium§r, although it isn\u0027t recommended because of how easily you can get §6Potassium§r, such as from §6Black Granite §3Processing§r, and how much §6Saltpeter§r it costs.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60382,14 +60618,14 @@ } } }, - "966:10": { + "967:10": { "preRequisites:11": [ 104 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6§6§6Interfaces§r§r§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.\n\n", + "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6Interfaces§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60421,14 +60657,14 @@ } } }, - "967:10": { + "968:10": { "preRequisites:11": [ 938 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Flint.§r\n\n§oThis step requires a Sifter at voltage §lLV§r§o or higher.§r\n\nSearch your §6Gravel§r for §6Flint§r. The only main thing you\u0027ll need this for is §6Storage Downgrades§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Flint.§r\n\n§oThis step requires a Sifter at voltage §lLV§o or higher.§r\n\nSearch your §6Gravel§r for §6Flint§r. The only main thing you\u0027ll need this for is §6Storage Downgrades§r.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60478,14 +60714,14 @@ } } }, - "968:10": { + "969:10": { "preRequisites:11": [ 937 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Stone Dust.\n\n§oThis step requires a Macerator at voltage §lLV§r§o or higher.§r\n\nCrush your §6Cobblestone§r into §6Stone Dust§r. You\u0027ll actually get a lot of §6Stone Dust§r from §eOre Processing§r, but this could be your backup source. You\u0027ll need this for §6Concrete§r. You can also centrifuge this, although the resources gained are not very useful, and are in very small amounts.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Stone Dust.\n\n§oThis step requires a Macerator at voltage §lLV§o or higher.§r\n\nCrush your §6Cobblestone§r into §6Stone Dust§r. You\u0027ll actually get a lot of §6Stone Dust§r from §eOre Processing§r, but this could be your backup source. You\u0027ll need this for §6Concrete§r. You can also centrifuge this, although the resources gained are not very useful, and are in very small amounts.\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60535,7 +60771,7 @@ } } }, - "969:10": { + "970:10": { "preRequisites:11": [ 947, 969 @@ -60543,7 +60779,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oThis quest completes via checkbox or upon achieving Concrete.\n\n§oThis step requires a Mixer at voltage §lLV§r§o or higher.§r\n\nMix §6Stone Dust§r, §6Clay Dust§r and some §9Water§r to make §6Concrete§r. This is probably the easiest way to get §6Concrete§r. You\u0027ll need this for §6Plascrete§r, used in §2Cleanrooms§r, and a tiny amount for §6Launch Pads§r.§o\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", + "desc:8": "§oThis quest completes via checkbox or upon achieving Concrete.\n\n§oThis step requires a Mixer at voltage §lLV§o or higher.§r\n\nMix §6Stone Dust§r, §6Clay Dust§r and some §9Water§r to make §6Concrete§r. This is probably the easiest way to get §6Concrete§r. You\u0027ll need this for §6Plascrete§r, used in §2Cleanrooms§r, and a tiny amount for §6Launch Pads§r.§o\n\n\n\nYou might have noticed that all quests in this line complete automatically via the main resource achieved by that step. This is as this §eCobbleworks§r chain is extremely versatile, and each resource may be important or not, depending on your situation.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -60593,10 +60829,10 @@ } } }, - "970:10": { + "971:10": { "preRequisites:11": [ - 936, - 925 + 925, + 936 ], "properties:10": { "betterquesting:10": { @@ -60628,7 +60864,7 @@ "rewards:9": {}, "tasks:9": {} }, - "971:10": { + "972:10": { "preRequisites:11": [ 95 ], @@ -60685,12 +60921,12 @@ } } }, - "972:10": { + "973:10": { "preRequisites:11": [ 227, - 810, 504, - 546 + 546, + 810 ], "properties:10": { "betterquesting:10": { @@ -60722,7 +60958,7 @@ "rewards:9": {}, "tasks:9": {} }, - "973:10": { + "974:10": { "preRequisites:11": [ 89 ], @@ -60756,7 +60992,7 @@ "rewards:9": {}, "tasks:9": {} }, - "974:10": { + "975:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60788,7 +61024,7 @@ "rewards:9": {}, "tasks:9": {} }, - "975:10": { + "976:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60820,7 +61056,7 @@ "rewards:9": {}, "tasks:9": {} }, - "976:10": { + "977:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60852,7 +61088,7 @@ "rewards:9": {}, "tasks:9": {} }, - "977:10": { + "978:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60884,7 +61120,7 @@ "rewards:9": {}, "tasks:9": {} }, - "978:10": { + "979:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60916,7 +61152,7 @@ "rewards:9": {}, "tasks:9": {} }, - "979:10": { + "980:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60948,7 +61184,7 @@ "rewards:9": {}, "tasks:9": {} }, - "980:10": { + "981:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -60980,7 +61216,7 @@ "rewards:9": {}, "tasks:9": {} }, - "981:10": { + "982:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61012,7 +61248,7 @@ "rewards:9": {}, "tasks:9": {} }, - "982:10": { + "983:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61044,7 +61280,7 @@ "rewards:9": {}, "tasks:9": {} }, - "983:10": { + "984:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61076,7 +61312,7 @@ "rewards:9": {}, "tasks:9": {} }, - "984:10": { + "985:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61108,7 +61344,7 @@ "rewards:9": {}, "tasks:9": {} }, - "985:10": { + "986:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61140,7 +61376,7 @@ "rewards:9": {}, "tasks:9": {} }, - "986:10": { + "987:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61172,7 +61408,7 @@ "rewards:9": {}, "tasks:9": {} }, - "987:10": { + "988:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61204,7 +61440,7 @@ "rewards:9": {}, "tasks:9": {} }, - "988:10": { + "989:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61236,7 +61472,7 @@ "rewards:9": {}, "tasks:9": {} }, - "989:10": { + "990:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61268,7 +61504,7 @@ "rewards:9": {}, "tasks:9": {} }, - "990:10": { + "991:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61304,7 +61540,7 @@ "rewards:9": {}, "tasks:9": {} }, - "991:10": { + "992:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61336,7 +61572,7 @@ "rewards:9": {}, "tasks:9": {} }, - "992:10": { + "993:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61368,7 +61604,7 @@ "rewards:9": {}, "tasks:9": {} }, - "993:10": { + "994:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61400,7 +61636,7 @@ "rewards:9": {}, "tasks:9": {} }, - "994:10": { + "995:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61436,7 +61672,7 @@ "rewards:9": {}, "tasks:9": {} }, - "995:10": { + "996:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61468,7 +61704,7 @@ "rewards:9": {}, "tasks:9": {} }, - "996:10": { + "997:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61500,10 +61736,10 @@ "rewards:9": {}, "tasks:9": {} }, - "997:10": { + "998:10": { "preRequisites:11": [ - 1002, - 825 + 825, + 1002 ], "properties:10": { "betterquesting:10": { @@ -61558,10 +61794,10 @@ } } }, - "998:10": { + "999:10": { "preRequisites:11": [ - 998, - 825 + 825, + 998 ], "properties:10": { "betterquesting:10": { @@ -61612,10 +61848,10 @@ } } }, - "999:10": { + "1000:10": { "preRequisites:11": [ - 408, - 106 + 106, + 408 ], "properties:10": { "betterquesting:10": { @@ -61679,7 +61915,7 @@ } } }, - "1000:10": { + "1001:10": { "preRequisites:11": [ 109 ], @@ -61745,10 +61981,10 @@ } } }, - "1001:10": { + "1002:10": { "preRequisites:11": [ - 1010, - 825 + 825, + 1010 ], "properties:10": { "betterquesting:10": { @@ -61803,10 +62039,10 @@ } } }, - "1002:10": { + "1003:10": { "preRequisites:11": [ - 1012, - 825 + 825, + 1012 ], "properties:10": { "betterquesting:10": { @@ -61861,10 +62097,10 @@ } } }, - "1003:10": { + "1004:10": { "preRequisites:11": [ - 1011, - 825 + 825, + 1011 ], "properties:10": { "betterquesting:10": { @@ -61919,7 +62155,7 @@ } } }, - "1004:10": { + "1005:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -61974,7 +62210,7 @@ } } }, - "1005:10": { + "1006:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -62029,7 +62265,7 @@ } } }, - "1006:10": { + "1007:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -62084,7 +62320,7 @@ } } }, - "1007:10": { + "1008:10": { "preRequisites:11": [], "properties:10": { "betterquesting:10": { @@ -62139,11 +62375,11 @@ } } }, - "1008:10": { + "1009:10": { "preRequisites:11": [ + 825, 1002, - 1003, - 825 + 1003 ], "properties:10": { "betterquesting:10": { @@ -62198,7 +62434,7 @@ } } }, - "1009:10": { + "1010:10": { "preRequisites:11": [ 1003, 1004 @@ -62233,10 +62469,10 @@ "rewards:9": {}, "tasks:9": {} }, - "1010:10": { + "1011:10": { "preRequisites:11": [ - 1006, - 1005 + 1005, + 1006 ], "properties:10": { "betterquesting:10": { @@ -62268,7 +62504,7 @@ "rewards:9": {}, "tasks:9": {} }, - "1011:10": { + "1012:10": { "preRequisites:11": [ 1007, 1008 @@ -62303,7 +62539,7 @@ "rewards:9": {}, "tasks:9": {} }, - "1012:10": { + "1013:10": { "preRequisites:11": [ 93 ], @@ -62369,7 +62605,7 @@ } } }, - "1013:10": { + "1014:10": { "preRequisites:11": [ 339 ], @@ -62435,7 +62671,7 @@ } } }, - "1014:10": { + "1015:10": { "preRequisiteTypes:7": [ 2 ], @@ -62513,13 +62749,13 @@ } } }, - "1015:10": { + "1016:10": { "preRequisites:11": [ - 62, - 230, - 148, 54, - 132 + 62, + 132, + 148, + 230 ], "properties:10": { "betterquesting:10": { @@ -62597,11 +62833,11 @@ } } }, - "1016:10": { + "1017:10": { "preRequisites:11": [ - 1016, + 120, 391, - 120 + 1016 ], "properties:10": { "betterquesting:10": { @@ -62683,7 +62919,7 @@ } } }, - "1017:10": { + "1018:10": { "preRequisites:11": [ 282 ], @@ -62749,15 +62985,15 @@ } } }, - "1018:10": { + "1019:10": { "preRequisites:11": [ - 295, - 107 + 107, + 295 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this. ", + "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -62840,7 +63076,7 @@ } } }, - "1019:10": { + "1020:10": { "preRequisites:11": [ 4 ], @@ -62912,7 +63148,7 @@ } } }, - "1020:10": { + "1021:10": { "preRequisites:11": [ 4 ], @@ -62978,15 +63214,15 @@ } } }, - "1021:10": { + "1022:10": { "preRequisites:11": [ - 100, - 98 + 98, + 100 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: This quest accepts both Memory Cards, and Advanced Memory Cards.§r\n\nA §6P2P Tunnel§r (§aPoint-to-Point Tunnel§r) is a powerful tool from §bApplied Energistics 2§r that can be used to send items, redstone, RF/EU or fluids from one location to another, using your ME system, without the need to use any disk storage space. §cTransporting RF/EU has a 5% tax on the input energy.§r\n\nEach P2P tunnel system may have only §cone input§r but §eany number of outputs§r. There is no limit on how many P2P tunnels, or P2P tunnel systems, you can have on one network.\n\nBy default, a P2P tunnel is an §6ME tunnel§r, which transmits Applied Energistics channels and power. Since channels are disabled, you will most likely not be using the default tunnel. You can change the mode of your P2P tunnels by right clicking the tunnel with the respective item seen in §bJEI§r.\n\nTo configure your P2P tunnels, take a §6Memory Card§r. While holding the memory card, §ashift-right click§r the unconfigured tunnel, to set the frequency of the input, and save the frequency to the memory card. Once the first tunnel has been set up this way and the memory card is configured with the frequency, any subsequent tunnel you §aright-click§r with the memory card will be set as the output of the most recent frequency used.\n\nYou can also use memory cards to copy the configuration of ME blocks and tile-entities, such as §6Interfaces§r and §6Storage Buses§r. §aShift-right click§r a ME block to copy its configuration, and §aright-click§r to paste that configuration. Note that this doesn\u0027t copy upgrades applied to the block.\n\nYou can also §ashift-right click§r to empty the frequency, or the ME block configuration, set in the card.\n\nThis pack has §bBetter P2P§r, which adds the §6Advanced Memory Card§r. Using it, you can §aright-click§r on any ME device or cable that is attached to the current system. This will allow you to see all your current P2P connections without having to search for your tunnels.\n\nYou can also configure P2P tunnels using your Advanced Memory Card. While holding the card, §aright-click§r on a tunnel, it will be §aselected§r. Once a tunnel is selected, it will be highlighted in §agreen§r. You can also see your other connections with the options to select or bind; hitting select will reselect the tunnel.\n\nAn incorrect setup will show in §cred§r (Usually P2P device without input).\n\nThe §6Advanced Memory Card§r has 3 modes accessible in the §3GUI§r:\n\n§aBind Output§r:\nOnce the tunnel you would like to be set as an input has been §aselected§r, hitting §bbind§r on any other connection will turn the selected tunnel into an input tunnel, and any binded tunnels will be turned into output tunnels for the selected tunnel.\n\n§aBind Input§r:\nOnce the tunnel you would like to be set as an output has been §aselected§r, hitting §bbind§r on any other tunnel will set the tunnel as the input of the selected tunnel. This is useful for when you can’t find the output tunnel.\n \n§aCopy Output§r:\nOnce an output tunnel you want to copy has been §aselected§r, hitting §bbind§r on any other connection will copy the output frequency of the selected tunnel.\n", + "desc:8": "§oNote: This quest accepts both Memory Cards, and Advanced Memory Cards.§r\n\nA §6P2P Tunnel§r (§aPoint-to-Point Tunnel§r) is a powerful tool from §bApplied Energistics 2§r that can be used to send items, redstone, RF/EU or fluids from one location to another, using your ME system, without the need to use any disk storage space. §cTransporting RF/EU has a 5% tax on the input energy.§r\n\nEach P2P tunnel system may have only §cone input§r but §eany number of outputs§r. There is no limit on how many P2P tunnels, or P2P tunnel systems, you can have on one network.\n\nBy default, a P2P tunnel is an §6ME tunnel§r, which transmits Applied Energistics channels and power. Since channels are disabled, you will most likely not be using the default tunnel. You can change the mode of your P2P tunnels by right clicking the tunnel with the respective item seen in §bJEI§r.\n\nTo configure your P2P tunnels, take a §6Memory Card§r. While holding the memory card, §ashift-right click§r the unconfigured tunnel, to set the frequency of the input, and save the frequency to the memory card. Once the first tunnel has been set up this way and the memory card is configured with the frequency, any subsequent tunnel you §aright-click§r with the memory card will be set as the output of the most recent frequency used.\n\nYou can also use memory cards to copy the configuration of ME blocks and tile-entities, such as §6Interfaces§r and §6Storage Buses§r. §aShift-right click§r a ME block to copy its configuration, and §aright-click§r to paste that configuration. Note that this doesn\u0027t copy upgrades applied to the block.\n\nYou can also §ashift-right click§r to empty the frequency, or the ME block configuration, set in the card.\n\nThis pack has §bBetter P2P§r, which adds the §6Advanced Memory Card§r. Using it, you can §aright-click§r on any ME device or cable that is attached to the current system. This will allow you to see all your current P2P connections without having to search for your tunnels.\n\nYou can also configure P2P tunnels using your Advanced Memory Card. While holding the card, §aright-click§r on a tunnel, it will be §aselected§r. Once a tunnel is selected, it will be highlighted in §agreen§r. You can also see your other connections with the options to select or bind; hitting select will reselect the tunnel.\n\nAn incorrect setup will show in §cred§r (Usually P2P device without input).\n\nThe §6Advanced Memory Card§r has 3 modes accessible in the §3GUI§r:\n\n§aBind Output§r:\nOnce the tunnel you would like to be set as an input has been §aselected§r, hitting §bbind§r on any other connection will turn the selected tunnel into an input tunnel, and any binded tunnels will be turned into output tunnels for the selected tunnel.\n\n§aBind Input§r:\nOnce the tunnel you would like to be set as an output has been §aselected§r, hitting §bbind§r on any other tunnel will set the tunnel as the input of the selected tunnel. This is useful for when you can’t find the output tunnel.\n \n§aCopy Output§r:\nOnce an output tunnel you want to copy has been §aselected§r, hitting §bbind§r on any other connection will copy the output frequency of the selected tunnel.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -63055,14 +63291,14 @@ } } }, - "1022:10": { + "1023:10": { "preRequisiteTypes:7": [ - 2, - 0 + 0, + 2 ], "preRequisites:11": [ - 808, - 604 + 604, + 808 ], "properties:10": { "betterquesting:10": { @@ -63303,7 +63539,7 @@ } } }, - "1023:10": { + "1024:10": { "preRequisiteTypes:7": [ 2 ], @@ -63345,7 +63581,7 @@ } } }, - "1024:10": { + "1025:10": { "preRequisites:11": [ 542 ], @@ -63411,10 +63647,10 @@ } } }, - "1025:10": { + "1026:10": { "preRequisites:11": [ - 56, - 53 + 53, + 56 ], "properties:10": { "betterquesting:10": { @@ -63470,14 +63706,14 @@ } } }, - "1026:10": { + "1027:10": { "preRequisites:11": [ 967 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionalidy it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", + "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionality it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -63536,7 +63772,7 @@ } } }, - "1027:10": { + "1028:10": { "preRequisites:11": [ 132 ], @@ -63613,7 +63849,7 @@ } } }, - "1028:10": { + "1029:10": { "preRequisites:11": [ 192 ], @@ -63685,7 +63921,7 @@ } } }, - "1029:10": { + "1030:10": { "preRequisiteTypes:7": [ 1 ], @@ -63760,12 +63996,14 @@ } } }, - "1030:10": { + "1031:10": { "preRequisiteTypes:7": [ - 2 + 2, + 0 ], "preRequisites:11": [ - 286 + 286, + 1035 ], "properties:10": { "betterquesting:10": { @@ -63829,7 +64067,7 @@ } } }, - "1031:10": { + "1032:10": { "preRequisites:11": [ 109, 339 @@ -63902,10 +64140,10 @@ } } }, - "1032:10": { + "1033:10": { "preRequisites:11": [ - 102, - 339 + 339, + 729 ], "properties:10": { "betterquesting:10": { @@ -63975,7 +64213,7 @@ } } }, - "1033:10": { + "1034:10": { "preRequisites:11": [ 286, 1037 @@ -64066,11 +64304,12 @@ } } }, - "1034:10": { + "1035:10": { "preRequisites:11": [ - 1037, 286, - 325 + 325, + 844, + 1037 ], "properties:10": { "betterquesting:10": { @@ -64164,10 +64403,10 @@ } } }, - "1035:10": { + "1036:10": { "preRequisites:11": [ - 1037, - 286 + 286, + 1037 ], "properties:10": { "betterquesting:10": { @@ -64285,14 +64524,15 @@ } } }, - "1036:10": { + "1037:10": { "preRequisites:11": [ + 328, 825 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", + "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -64351,15 +64591,15 @@ } } }, - "1037:10": { + "1038:10": { "preRequisites:11": [ - 1039, - 196 + 196, + 1039 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", + "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -64436,10 +64676,10 @@ } } }, - "1038:10": { + "1039:10": { "preRequisites:11": [ - 535, - 258 + 258, + 535 ], "properties:10": { "betterquesting:10": { @@ -64503,7 +64743,7 @@ } } }, - "1039:10": { + "1040:10": { "preRequisites:11": [ 259 ], @@ -64569,14 +64809,14 @@ } } }, - "1040:10": { + "1041:10": { "preRequisites:11": [ 157 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", + "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -64635,12 +64875,14 @@ } } }, - "1041:10": { + "1042:10": { "preRequisiteTypes:7": [ - 1 + 1, + 2 ], "preRequisites:11": [ - 524 + 524, + 847 ], "properties:10": { "betterquesting:10": { @@ -64716,7 +64958,7 @@ } } }, - "1042:10": { + "1043:10": { "preRequisites:11": [ 286 ], @@ -64782,7 +65024,7 @@ } } }, - "1043:10": { + "1044:10": { "preRequisiteTypes:7": [ 1 ], @@ -64851,7 +65093,7 @@ } } }, - "1044:10": { + "1045:10": { "preRequisites:11": [ 3 ], @@ -64916,6 +65158,303 @@ "taskID:8": "bq_standard:retrieval" } } + }, + "1046:10": { + "preRequisites:11": [ + 56 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §aAlarm§r is a simple tool which plays a loud sound when given a redstone signal. Useful for notifying you if things go wrong.\n\nRight-click the block to configure its range and sound. This tool requires §d4 EU/t§r input to work.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 10, + "OreDict:8": "", + "id:8": "gregtech:warning_sign" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Alarm", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1046, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1751, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1047:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Reservoir Hatch§r acts as an infinite water source as a fluid input hatch.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Cooking for Blockheads", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1047, + "rewards:9": { + "0:10": { + "index:3": 1, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1048:10": { + "preRequisites:11": [ + 3 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Electric Prospector\u0027s Scanner§r given for free now has integration with §eJourneyMap§r.\n\nPick up surface rocks, right-click ore blocks, or use an electric prospector on ore mode to discover veins.\n\nPress the \"action key\" (default: delete) while hovering over a vein to mark it as depleted (or not depleted).\n\nDouble-click a vein to mark it as a waypoint, and again to unmark it.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:filled_map" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Visual Ores", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1048, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1049:10": { + "preRequisiteTypes:7": [ + 1, + 1 + ], + "preRequisites:11": [ + 22, + 60 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Most multiblocks now support rotation along any axis. Right-click with a Wrench on a face with a rotation ↺ symbol to rotate the controller.\n\nThe rules for building multiblocks remain the same.\n\nTake your setups to a new dimension!\n\nThe §3Cleanroom§r, §3Multiblock Miners/Drills§r, and §3Distillation Tower§r do not support being rotated.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "redstonearsenal:tool.wrench_flux", + "tag:10": { + "Energy:3": 0 + } + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Multiblock Rotation", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1049, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1050:10": { + "preRequisites:11": [ + 19 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "§oThis quest accepts LV, MV or HV Miner.§r\n\nThe §3Miner§r mines ore blocks directly below it in a certain radius. Higher tier Miners operate faster and have larger covered areas.\n\nThe LV Miner calls for an §6LV Sensor§r, which requires a bit of §6Quartzite§r. Buy some if you haven\u0027t come across it yet.\n\nAt §5EV§r tier, you can build §3Large Miners§r.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Automatic Mining", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1050, + "rewards:9": { + "0:10": { + "index:3": 0, + "rewardID:8": "bq_standard:item", + "rewards:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "nomilabs:nomicoin5" + } + } + } + }, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "questbookSingleMiner", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } } }, "questLines:9": { @@ -64947,10 +65486,10 @@ }, "1:10": { "id:3": 19, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -736, - "y:3": 184 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -740, + "y:3": 180 }, "2:10": { "id:3": 21, @@ -65047,7 +65586,7 @@ "id:3": 53, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -804, + "x:3": -852, "y:3": 224 }, "16:10": { @@ -65055,7 +65594,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, - "y:3": 236 + "y:3": 272 }, "17:10": { "id:3": 60, @@ -65075,7 +65614,7 @@ "id:3": 72, "sizeX:3": 56, "sizeY:3": 56, - "x:3": -908, + "x:3": -956, "y:3": 292 }, "20:10": { @@ -65089,21 +65628,21 @@ "id:3": 146, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 136 }, "22:10": { "id:3": 147, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, - "y:3": 236 + "x:3": -788, + "y:3": 264 }, "23:10": { "id:3": 215, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 40 }, "24:10": { @@ -65117,8 +65656,8 @@ "id:3": 231, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -772, - "y:3": 184 + "x:3": -788, + "y:3": 136 }, "26:10": { "id:3": 259, @@ -65139,7 +65678,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, - "y:3": 136 + "y:3": 68 }, "29:10": { "id:3": 272, @@ -65152,7 +65691,7 @@ "id:3": 273, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 404 }, "31:10": { @@ -65173,22 +65712,22 @@ "id:3": 352, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, + "x:3": -840, "y:3": 88 }, "34:10": { "id:3": 402, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 356 + "x:3": -456, + "y:3": 384 }, "35:10": { "id:3": 403, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -516, - "y:3": 356 + "x:3": -504, + "y:3": 384 }, "36:10": { "id:3": 413, @@ -65215,28 +65754,28 @@ "id:3": 497, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -940, - "y:3": 236 + "x:3": -860, + "y:3": 184 }, "40:10": { "id:3": 498, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, + "x:3": -888, "y:3": 404 }, "41:10": { "id:3": 516, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, - "y:3": 308 + "x:3": -892, + "y:3": 236 }, "42:10": { "id:3": 517, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -892, + "x:3": -940, "y:3": 236 }, "43:10": { @@ -65313,8 +65852,8 @@ "id:3": 774, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, - "y:3": 184 + "x:3": -940, + "y:3": 136 }, "54:10": { "id:3": 779, @@ -65327,15 +65866,15 @@ "id:3": 788, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -564, - "y:3": 404 + "x:3": -456, + "y:3": 240 }, "56:10": { "id:3": 789, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -564, - "y:3": 356 + "x:3": -504, + "y:3": 240 }, "57:10": { "id:3": 814, @@ -65362,8 +65901,8 @@ "id:3": 819, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -516, - "y:3": 404 + "x:3": -504, + "y:3": 432 }, "61:10": { "id:3": 829, @@ -65376,15 +65915,15 @@ "id:3": 890, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 308 + "x:3": -456, + "y:3": 336 }, "63:10": { "id:3": 893, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -516, - "y:3": 308 + "x:3": -504, + "y:3": 336 }, "64:10": { "id:3": 903, @@ -65397,8 +65936,8 @@ "id:3": 913, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 260 + "x:3": -456, + "y:3": 288 }, "66:10": { "id:3": 962, @@ -65411,15 +65950,36 @@ "id:3": 1020, "sizeX:3": 36, "sizeY:3": 36, - "x:3": -468, - "y:3": 404 + "x:3": -456, + "y:3": 432 }, "68:10": { "id:3": 1026, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -840, - "y:3": 276 + "x:3": -884, + "y:3": 280 + }, + "69:10": { + "id:3": 1046, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -504, + "y:3": 288 + }, + "70:10": { + "id:3": 1049, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -504, + "y:3": 192 + }, + "71:10": { + "id:3": 1050, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -788, + "y:3": 184 } } }, @@ -65467,50 +66027,50 @@ "id:3": 31, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -248, - "y:3": 792 + "x:3": -220, + "y:3": 852 }, "4:10": { "id:3": 32, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -176, - "y:3": 796 + "x:3": -140, + "y:3": 856 }, "5:10": { "id:3": 35, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -212, + "x:3": -216, "y:3": 756 }, "6:10": { "id:3": 42, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -180, - "y:3": 720 + "x:3": -260, + "y:3": 732 }, "7:10": { "id:3": 44, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -132, - "y:3": 796 + "x:3": -140, + "y:3": 792 }, "8:10": { "id:3": 47, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -92, - "y:3": 756 + "x:3": -176, + "y:3": 824 }, "9:10": { "id:3": 48, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -92, - "y:3": 796 + "x:3": -140, + "y:3": 824 }, "10:10": { "id:3": 52, @@ -65530,15 +66090,15 @@ "id:3": 57, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -212, - "y:3": 720 + "x:3": -236, + "y:3": 816 }, "13:10": { "id:3": 67, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -132, - "y:3": 756 + "x:3": -176, + "y:3": 792 }, "14:10": { "id:3": 70, @@ -65733,8 +66293,8 @@ "id:3": 126, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -216, - "y:3": 580 + "x:3": -176, + "y:3": 508 }, "42:10": { "id:3": 129, @@ -65831,8 +66391,8 @@ "id:3": 213, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -248, - "y:3": 720 + "x:3": -260, + "y:3": 788 }, "56:10": { "id:3": 227, @@ -66097,8 +66657,8 @@ "id:3": 831, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -216, - "y:3": 612 + "x:3": -156, + "y:3": 544 }, "94:10": { "id:3": 832, @@ -66167,15 +66727,15 @@ "id:3": 896, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 504 + "x:3": -176, + "y:3": 700 }, "104:10": { "id:3": 897, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 544 + "x:3": -216, + "y:3": 700 }, "105:10": { "id:3": 973, @@ -66265,15 +66825,15 @@ "id:3": 65, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -560, - "y:3": 216 + "x:3": -508, + "y:3": 132 }, "5:10": { "id:3": 68, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 312 + "x:3": -488, + "y:3": 276 }, "6:10": { "id:3": 132, @@ -66286,15 +66846,15 @@ "id:3": 139, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -228, - "y:3": 132 + "x:3": -216, + "y:3": 280 }, "8:10": { "id:3": 144, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -228, - "y:3": 168 + "x:3": -216, + "y:3": 240 }, "9:10": { "id:3": 148, @@ -66468,22 +67028,22 @@ "id:3": 176, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -306, - "y:3": -48 + "x:3": -360, + "y:3": 60 }, "34:10": { "id:3": 177, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -258, - "y:3": -48 + "x:3": -360, + "y:3": 144 }, "35:10": { "id:3": 178, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -204, - "y:3": 24 + "x:3": -156, + "y:3": 144 }, "36:10": { "id:3": 179, @@ -66496,15 +67056,15 @@ "id:3": 180, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -204, - "y:3": -12 + "x:3": -120, + "y:3": 144 }, "38:10": { "id:3": 181, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -204, - "y:3": -48 + "x:3": -84, + "y:3": 144 }, "39:10": { "id:3": 182, @@ -66566,36 +67126,36 @@ "id:3": 197, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 204 + "x:3": -360, + "y:3": 240 }, "48:10": { "id:3": 198, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -420, - "y:3": 240 + "x:3": -360, + "y:3": 280 }, "49:10": { "id:3": 199, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -228, - "y:3": 204 + "x:3": -216, + "y:3": 192 }, "50:10": { "id:3": 201, "sizeX:3": 24, "sizeY:3": 24, "x:3": -456, - "y:3": 144 + "y:3": 192 }, "51:10": { "id:3": 234, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -264, - "y:3": 168 + "x:3": -216, + "y:3": 164 }, "52:10": { "id:3": 235, @@ -66616,7 +67176,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -548, - "y:3": 180 + "y:3": 144 }, "55:10": { "id:3": 248, @@ -66644,14 +67204,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -548, - "y:3": 144 + "y:3": 192 }, "59:10": { "id:3": 261, "sizeX:3": 24, "sizeY:3": 24, "x:3": -288, - "y:3": 276 + "y:3": 280 }, "60:10": { "id:3": 267, @@ -66672,7 +67232,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -704, - "y:3": 308 + "y:3": 316 }, "63:10": { "id:3": 297, @@ -66774,10 +67334,10 @@ }, "77:10": { "id:3": 311, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -288, - "y:3": 204 + "sizeX:3": 48, + "sizeY:3": 48, + "x:3": -336, + "y:3": 180 }, "78:10": { "id:3": 312, @@ -66790,15 +67350,15 @@ "id:3": 318, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -330, + "x:3": -324, "y:3": 108 }, "80:10": { "id:3": 328, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 132 + "x:3": -48, + "y:3": 176 }, "81:10": { "id:3": 339, @@ -66811,35 +67371,35 @@ "id:3": 340, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -824, - "y:3": 284 + "x:3": -812, + "y:3": 316 }, "83:10": { "id:3": 341, "sizeX:3": 20, "sizeY:3": 20, "x:3": -392, - "y:3": 280 + "y:3": 296 }, "84:10": { "id:3": 344, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -512, - "y:3": 176 + "x:3": -524, + "y:3": 220 }, "85:10": { "id:3": 347, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 204 + "x:3": -120, + "y:3": 192 }, "86:10": { "id:3": 350, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -160, + "x:3": -124, "y:3": 236 }, "87:10": { @@ -66874,7 +67434,7 @@ "id:3": 512, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, + "x:3": -420, "y:3": 240 }, "92:10": { @@ -66902,7 +67462,7 @@ "id:3": 542, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, + "x:3": -456, "y:3": 240 }, "96:10": { @@ -66916,8 +67476,8 @@ "id:3": 551, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -496, - "y:3": 208 + "x:3": -524, + "y:3": 284 }, "98:10": { "id:3": 555, @@ -66937,113 +67497,113 @@ "id:3": 610, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -480, - "y:3": 176 + "x:3": -524, + "y:3": 252 }, "101:10": { "id:3": 611, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, - "y:3": 168 + "x:3": -84, + "y:3": 176 }, "102:10": { "id:3": 669, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 276 }, "103:10": { "id:3": 671, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 240 }, "104:10": { "id:3": 672, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 240 }, "105:10": { "id:3": 673, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 276 }, "106:10": { "id:3": 674, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, + "x:3": -120, "y:3": 276 }, "107:10": { "id:3": 675, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, + "x:3": -120, "y:3": 312 }, "108:10": { "id:3": 676, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -156, + "x:3": -120, "y:3": 348 }, "109:10": { "id:3": 677, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 312 }, "110:10": { "id:3": 678, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 348 }, "111:10": { "id:3": 679, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, + "x:3": -84, "y:3": 348 }, "112:10": { "id:3": 680, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -168, + "x:3": -132, "y:3": 384 }, "113:10": { "id:3": 693, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, + "x:3": -456, "y:3": 276 }, "114:10": { "id:3": 694, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -528, + "x:3": -420, "y:3": 276 }, "115:10": { "id:3": 732, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -120, - "y:3": 168 + "x:3": -156, + "y:3": 176 }, "116:10": { "id:3": 745, @@ -67088,207 +67648,221 @@ "y:3": 84 }, "122:10": { + "id:3": 782, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -812, + "y:3": 284 + }, + "123:10": { "id:3": 783, "sizeX:3": 48, "sizeY:3": 48, "x:3": -366, "y:3": 420 }, - "123:10": { + "124:10": { "id:3": 785, "sizeX:3": 20, "sizeY:3": 20, "x:3": -392, - "y:3": 220 + "y:3": 268 }, - "124:10": { + "125:10": { "id:3": 798, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -192, + "x:3": -156, "y:3": 312 }, - "125:10": { + "126:10": { "id:3": 799, "sizeX:3": 24, "sizeY:3": 24, "x:3": -252, - "y:3": 276 + "y:3": 280 }, - "126:10": { + "127:10": { "id:3": 800, "sizeX:3": 0, "sizeY:3": 0, "x:3": -264, "y:3": 84 }, - "127:10": { + "128:10": { "id:3": 806, "sizeX:3": 24, "sizeY:3": 24, "x:3": -56, "y:3": 108 }, - "128:10": { + "129:10": { "id:3": 807, "sizeX:3": 24, "sizeY:3": 24, "x:3": -276, "y:3": 40 }, - "129:10": { + "130:10": { "id:3": 825, "sizeX:3": 24, "sizeY:3": 24, "x:3": -684, "y:3": -100 }, - "130:10": { + "131:10": { "id:3": 826, "sizeX:3": 40, "sizeY:3": 40, "x:3": -64, "y:3": -108 }, - "131:10": { + "132:10": { "id:3": 827, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -258, - "y:3": -79 + "x:3": -324, + "y:3": 144 }, - "132:10": { + "133:10": { "id:3": 828, "sizeX:3": 32, "sizeY:3": 32, "x:3": -364, - "y:3": 236 + "y:3": 320 }, - "133:10": { + "134:10": { "id:3": 835, "sizeX:3": 24, "sizeY:3": 24, "x:3": -156, "y:3": -48 }, - "134:10": { + "135:10": { "id:3": 838, "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, "y:3": 284 }, - "135:10": { + "136:10": { "id:3": 841, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 312 + "y:3": 324 }, - "136:10": { + "137:10": { "id:3": 849, "sizeX:3": 24, "sizeY:3": 24, "x:3": -360, - "y:3": 276 + "y:3": 364 }, - "137:10": { + "138:10": { "id:3": 850, "sizeX:3": 32, "sizeY:3": 32, - "x:3": -364, - "y:3": 308 + "x:3": -328, + "y:3": 360 }, - "138:10": { + "139:10": { "id:3": 851, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 276 + "y:3": 280 }, - "139:10": { + "140:10": { "id:3": 852, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -84, + "x:3": -48, "y:3": 312 }, - "140:10": { + "141:10": { "id:3": 857, "sizeX:3": 24, "sizeY:3": 24, "x:3": -704, "y:3": 352 }, - "141:10": { + "142:10": { "id:3": 858, "sizeX:3": 32, "sizeY:3": 32, "x:3": -552, "y:3": 348 }, - "142:10": { + "143:10": { "id:3": 859, "sizeX:3": 72, "sizeY:3": 72, "x:3": -444, "y:3": 328 }, - "143:10": { + "144:10": { "id:3": 888, "sizeX:3": 32, "sizeY:3": 32, "x:3": -60, "y:3": 68 }, - "144:10": { + "145:10": { "id:3": 892, "sizeX:3": 48, "sizeY:3": 48, "x:3": -426, "y:3": 420 }, - "145:10": { + "146:10": { "id:3": 899, "sizeX:3": 24, "sizeY:3": 24, "x:3": -864, "y:3": -100 }, - "146:10": { + "147:10": { "id:3": 900, "sizeX:3": 24, "sizeY:3": 24, "x:3": -108, "y:3": 72 }, - "147:10": { + "148:10": { "id:3": 1014, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -740, "y:3": 352 }, - "148:10": { + "149:10": { "id:3": 1025, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 276 + "x:3": -488, + "y:3": 240 }, - "149:10": { + "150:10": { "id:3": 1032, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -816, - "y:3": 316 + "x:3": -812, + "y:3": 352 }, - "150:10": { + "151:10": { "id:3": 1033, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -788, - "y:3": 340 + "x:3": -776, + "y:3": 352 + }, + "152:10": { + "id:3": 1047, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -812, + "y:3": 252 } } }, @@ -69989,8 +70563,8 @@ "id:3": 25, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -60, - "y:3": -42 + "x:3": 72, + "y:3": -36 }, "17:10": { "id:3": 37, @@ -70150,8 +70724,8 @@ "id:3": 496, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -60, - "y:3": -6 + "x:3": 72, + "y:3": 0 }, "40:10": { "id:3": 530, @@ -70256,7 +70830,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 36, - "y:3": -42 + "y:3": -36 }, "55:10": { "id:3": 909, @@ -70319,7 +70893,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 36, - "y:3": -6 + "y:3": 0 + }, + "64:10": { + "id:3": 1048, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": 108, + "y:3": -36 } } }, @@ -70728,6 +71309,13 @@ "y:3": 459 }, "55:10": { + "id:3": 810, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": 312, + "y:3": 444 + }, + "56:10": { "id:3": 952, "sizeX:3": 24, "sizeY:3": 24, @@ -71114,7 +71702,7 @@ "betterquesting:10": { "bg_image:8": "", "bg_size:3": 256, - "desc:8": "Convert between matter and energy with §bApplied Energistics§r§r.\n\nAutomate ALL the things! o/", + "desc:8": "Convert between matter and energy with §bApplied Energistics§r.\n\nAutomate ALL the things! o/", "icon:10": { "Count:3": 1, "Damage:2": 2, diff --git a/overrides/config/betterquesting/saved_quests/ExpertQuests.json b/overrides/config/betterquesting/saved_quests/ExpertQuests.json index bd1835f..b0c2ec2 100644 --- a/overrides/config/betterquesting/saved_quests/ExpertQuests.json +++ b/overrides/config/betterquesting/saved_quests/ExpertQuests.json @@ -1,5 +1,5 @@ { - "build:8": "4.2.1", + "build:8": "4.2.2", "format:8": "2.0.0", "questDatabase:9": { "0:10": { @@ -9,7 +9,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.\n\n", + "desc:8": "The main purpose for this device is to turn §6Certus Quartz§r into §6Charged Certus Quartz Crystals§r.\n\nThis device can be powered with RF via energy conduits or use AE energy from a network via ME conduits or cables.\n\nIt accepts power from two sides. Which two sides? It\u0027s pretty easy to guess.\n\n\n\n\n\n\n\n\nOk, ok. It\u0027s the top and bottom.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -70,8 +70,8 @@ }, "1:10": { "preRequisites:11": [ - 282, - 116 + 116, + 282 ], "properties:10": { "betterquesting:10": { @@ -170,12 +170,12 @@ }, "2:10": { "preRequisites:11": [ - 55 + 1052 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.\n\n", + "desc:8": "Note: this quest accepts both LV and MV Canning Machines.\n\n§aLV Batteries§r were very simple to make, but more effective forms of power storage will be more complex to build, so we\u0027ll need to lay the groundwork now.\n\nPut your §3Centrifuge§r to work for the §6Antimony§r you\u0027ll need, which comes in tiny piles from processing §6Tetrahedrite Ore§r and §6Stibnite Ore§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -339,7 +339,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§c§rOres in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, there is a quest you can use to refill the energy of the scanner, which is located on this chapter.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron §cNuggets§e a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", + "desc:8": "Ores in §5Nomifactory§r exist in large clusters, or \u0027§eveins§r\u0027. These veins are scattered around the world, and are relatively common. §2The upgraded HV Electric Prospector\u0027s Scanner you were given will tell you the types of ores you can find within a 7x7 chunk area!\n§r\nWhile the Scanner requires energy to work, you are unlikely to deplete its battery. That said, there is a quest you can use to refill the energy of the scanner, which is located on this chapter.\n\nIn order to proceed, you\u0027ll need to locate a source of §6Iron§r. You have a few options. §6Magnetite§r veins are higher up and contain large amounts of iron, as well as some §6Vanadium§r and §6Gold§r. Another good source of iron is §6Limonite§r veins, which contain several types of iron. Finally, §6Pyrite§r can be found paired with §6Copper§r in several types of veins.\n\n§6Wrought Iron§r is obtained simply by §esmelting Iron §cNuggets§e a second time§r. It has more durability than Iron, so it is better for making tools, but §cdo not convert your entire Iron supply over to Wrought Iron§r. The two materials are not interchangeable and you\u0027ll need Iron or Wrought Iron as demanded by various recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1019,7 +1019,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", + "desc:8": "If you try to craft each item only when you need it, you\u0027ll go insane. It is far more effective to §ebatch-craft§r frequently used items so you don\u0027t have to do it as often. It is very satisfying to get all the ingredients together then craft §ea stack of items§r all at once.\n\n§3Crafting Stations§r are an indispensable tool for batch-crafting. They can save recipes for all the steps in production chains for things like tools, circuits, machine casings, and more. You will want to §emake several of them§r for the convenience they offer.\n\nEach Crafting Station comes with some inventory space for general items, as well as a dedicated row specifically for holding §bGregTech§r tools. In addition, Crafting Stations can §einteract with adjacent inventories§r, so you can keep common materials in a container between them. This includes access points to large virtual inventories, like a §aDrawer Controller§r, which you will be able to make later.\n\nTo use the Crafting Station, you must either manually set up a recipe in the pattern area, or click-in a table recipe from §bJEI§r. Place the ingredients inside the Crafting Station or an adjacent container, then you can click the resulting item to craft it. Once an item is crafted, the recipe will appear on the top-right in the history pane. As usual, Shift-clicking the output item will craft up to a stack of it.\n\nEach Crafting Station will remember §eup to the last nine recipes§r you made in them, which can be recalled by clicking the item in the top-right recipe history pane. Old recipes will be cycled out, so if you want to ensure a recipe doesn\u0027t ever get replaced by a different one, §eShift-click the recipe in the history pane to lock it§r.\n\nThe available ingredients from neighboring inventories are visible through the §eStorage§r tab on the Crafting Station, and you can also place items into this tab to send them to available neighboring inventories.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1505,7 +1505,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nYou can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.\n", + "desc:8": "The main function of this oven is to increase the fuel values of your wood and coal while also recovering some of the various potentially useful waste products.\n\nTurning §6Coal§r into §6Coal Coke§r will not only make it more useful as fuel, but will also produce §9Phenol§r, which you\u0027ll need for circuits.\n\nThe Pyrolyse Oven is also the source of several other fluids that can be distilled for useful ingredients.\n\nYou can §6sneak-right click§r the controller to enable the in-world preview.\n\n§2As stated in the tooltip, higher tier coils will make this faster.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -1668,7 +1668,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Your first RF power generator!\n\nKeep in mind that §eDynamos only output power when burning through fuel, and only the block attached directly to the coil will get provided with power§r.", + "desc:8": "Your first major crafting project!\n\nThe §6Steam Dynamo§r will be your source of §dpower§r for the early game. It requires §9Water§r and burnable fuel like §6Coal§r or §6Sugar Cane§r to produce power.\n\nYou can also choose to make §6Basic Steam Turbines§r to generate EU directly.\n\nKeep in mind that §eDynamos only output power when burning through fuel§r, and §6only the block attached directly to the coil will get provided with power§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -2457,14 +2457,14 @@ }, "38:10": { "preRequisites:11": [ + 24, 40, - 530, - 24 + 530 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts any §2§oLV Energy Converter§r§o.\n\n§r§aRF power§r and §bGregTech§r §aEU power§r is incompatible. With your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §3§2Energy Converter§r.\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", + "desc:8": "§oNote: this quest accepts any §oLV Energy Converter§o.\n\n§rThe §3Steam Dynamos§r you have made are capable of generating §aRF power§r, but §bGregTech§r machines require §aEU power§r.\n\n§cNote that the two are incompatible!§r\n\nWith your first §6circuit§r in hand, you are ready to build a §eLow Voltage (LV) §2Energy Converter§r.\n\nThe §2Energy Converter§r is a special device that §econverts §2between §aRF power§r and §aEU power§r. They come in §2four sizes: 1A, 4A, 8A, and 16A.\n\n§aRF§r converts into §aEU§r at a §e4 to 1 ratio§r. §a100 RF§r becomes §a25 EU§r, and vice-versa. §2Use a Soft Hammer to change the conversion direction.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3050,7 +3050,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §3Cryogenic Distillation§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV Centrifuge.\n\nCentrifuging air is a reliable way to get §9Nitrogen§r before you have access to §3Cryogenic Distillation§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3104,7 +3104,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2GTCEu Fluid Pipes§r are now available, much improved from CE. Their advantage is higher §dthroughput§r, but they have limitations on the kinds of fluids (§eacids, gases§r, etc) they can transport safely. Check each pipe material\u0027s tooltip for details.\n\nThere are also §6Quadruple and Nonuple Pipes§r for transporting multiple fluid types through the same block.\n\nYou also can only use them for now, until you get access to...\n\n§bEnderIO§r§6 Fluid Conduits§r. They have the advantage of being §6Conduits§r, allowing them to fit in the same block as other §6Conduits§r. \n\nPick your poison.", + "desc:8": "§2GTCEu Fluid Pipes§r are now available, much improved from CE. Their advantage is higher §dthroughput§r, but they have limitations on the kinds of fluids (§eacids, gases§r, etc) they can transport safely. Check each pipe material\u0027s tooltip for details.\n\nThere are also §6Quadruple and Nonuple Pipes§r for transporting multiple fluid types through the same block.\n\nYou also can only use them for now, until you get access to...\n\n§bEnderIO§6 Fluid Conduits§r. They have the advantage of being §6Conduits§r, allowing them to fit in the same block as other §6Conduits§r. \n\nPick your poison.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3388,13 +3388,12 @@ }, "55:10": { "preRequisites:11": [ - 53, - 727 + 53 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9Liquid Rubber§r.\n\n", + "desc:8": "§3Centrifuges§r spin up items to seperate them into simpler components. Similar to a §bElectrolyzer§r.\n\nCurrently, you need this to make §eGlue§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3406,7 +3405,7 @@ "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, - "name:8": "§2Centrifuge", + "name:8": "Centrifuge", "partysinglereward:1": 0, "questlogic:8": "AND", "repeat_relative:1": 1, @@ -3543,7 +3542,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Batteries§r are §bGregTech §rpower storage for §aEU§r energy.\n\nThere are several types of rechargeable batteries you can make; §2Lithium Batteries§r are the best ones, followed by §6Cadmium§r and §6Sodium§r.\n\n§6Lithium§r is possible to find by processing §6Lepidolite§r. Later, it is found inside of §6Tungsten§r veins that only spawn in §eThe End§r§r. §6Cadmium§r comes from various §6Refined Ores§r, and §6Sodium§r is the easiest - from §6Salt§r, §6Clay§r, and many other minerals.", + "desc:8": "§6Batteries§r are §bGregTech §rpower storage for §aEU§r energy.\n\nThere are several types of rechargeable batteries you can make; §2Lithium Batteries§r are the best ones, followed by §6Cadmium§r and §6Sodium§r.\n\n§6Lithium§r is possible to find by processing §6Lepidolite§r. Later, it is found inside of §6Tungsten§r veins that only spawn in §eThe End§r. §6Cadmium§r comes from various §6Refined Ores§r, and §6Sodium§r is the easiest - from §6Salt§r, §6Clay§r, and many other minerals.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3663,7 +3662,8 @@ "preRequisites:11": [ 21, 59, - 903 + 903, + 1051 ], "properties:10": { "betterquesting:10": { @@ -3776,7 +3776,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§6§2Perfect Gems§r can be obtained from such missions.", + "desc:8": "Some Micro Miner missions use a §6Gemstone Sensor§r to scout out gems instead of ores.\n\n§2Perfect Gems§r can be obtained from such missions.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -3879,13 +3879,13 @@ }, "63:10": { "preRequisites:11": [ - 62, - 1 + 1, + 62 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.\n\n", + "desc:8": "The §aME Chest§r is somewhat impractical to use on its own, but it\u0027s a necessary ingredient for the much more useful §6ME Drive§r.\n\nThis is a rudimentary digital item storage device. By placing a §6Storage Cell§r inside it, you can access the contents as though you were looking through a chest. You can carry the disk to another location and place it down in a different ME Chest if you want, and the items will come with it.\n\n§cDon\u0027t put Storage Cells inside other portable mod inventories like a Satchel, (or vice-versa) as you risk corrupting the contents of the Satchel and the Storage Cell.§r There\u0027s technical reasons why this happens (NBT overflow), and it\u0027s not unique to these items, but that\u0027s not really worth going into.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4003,18 +4003,18 @@ "65:10": { "preRequisiteTypes:7": [ 0, - 0, + 2, 2 ], "preRequisites:11": [ 246, - 386, - 328 + 328, + 386 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore§r\n§\n\nor:\n§6* Dense Magma Block§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", + "desc:8": "The Third Micro Miner. §2You\u0027ll need that Boron in the MV Field Generators.§r\n\nThis one can get you:\n§6* Scheelite Ore\n* Tungstate Ore\n§2* Ilmenite Ore§6\n* Vanadium Magnetite Ore\n* Tetrahedrite Ore\n* Cassiterite Ore\n* Tin Ore\n* Redstone Ore\n* Certus Quartz Ore\n* Almandine Ore\n* Lepidolite Ore\n§2* Cobaltite Ore\n* Laurite Ore\n* Cuprorhodsite Ore§r\n\nor:\n§6* Dense Magma Block§r\n\nWhen equipped with Gemstone Sensor:\n§2* Perfect Diamonds\n* Perfect Rubies\n* Perfect Topaz\n* Perfect Emeralds\n§6* Sapphire Ore\n* Silver Ore\n* Gold Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4069,7 +4069,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Use your newly acquired §3Alloy Smelter§r§ to make some new alloys!\n\n§eCopper§r alloyed with §eRedstone§r makes §6Red Alloy Ingots§r.\n\n§eIron§r alloyed with §eRedstone§r makes §6Conductive Iron Ingots§r.\n\n§aHammer§r them into §6Plates§r, then §acut§r them into §6Wires§r.\n", + "desc:8": "Use your newly acquired §3Alloy Smelter to make some new alloys!\n\n§eCopper§r alloyed with §eRedstone§r makes §6Red Alloy Ingots§r.\n\n§eIron§r alloyed with §eRedstone§r makes §6Conductive Iron Ingots§r.\n\n§aHammer§r them into §6Plates§r, then §acut§r them into §6Wires§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4370,7 +4370,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.\n", + "desc:8": "An §3MV Electrolyzer§r allows you to process recipes that require up to 128 EU/t, and can optionally overclock recipes costing at most 32 EU/t.\n\nThis means you can split more kinds of things for useful products.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4761,7 +4761,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of small dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", + "desc:8": "§2Initial circuit components are a bit more difficult in CEu, and you need Arsenic in addition to Gallium.§r\n\nFor §dGallium§r, you may, ranged from worst to best:\n\n- §3Electrolyze §aSphalerite§r for a low chance of dust. Note that you lose on direct smelting value.\n\n-§r Put §aCrushed Bauxite§r in the §3Chemical Bath§r. Note that this requires §9Sodium Persulfate§r. \n\n- Obtain it as a Byproduct of §aSphalerite§r Ore Processing, in the §3Thermal Centrifuge§r or §3Centrifuge§r.\n\n§2For Arsenic, you must centrifuge Realgar Dust, or (more involvedly) flash smelt Cobaltite Dust in the EBF, and electrolyse the resultant Arsenic Trioxide.\n\nCombine both in a Mixer to make Gallium Arsenide.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -4829,7 +4829,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.\n", + "desc:8": "Cuts things up.\n\nThe §3Cutting Machine§r is able to cut wafers, rods, wood, and various other things for you, making it a versatile crafting tool. Cutting blocks into 9 plates may be faster than using a §2Bending Machine §rto make them one at a time.\n\nThe MV version is required for cutting §6Silicon Boules§r for easier §6Diodes§r once you get §9Polyethylene (PE)§r, and for cutting §6Wafers§r into usable components. \nThe blade will require you to make §2Vanadiumsteel§r.\n\nCutting Machines work with plain §9Water§r for all recipes. You can also use §9Distilled Water§r which speeds up the processing somewhat, or §9Lubricant§r that speeds it up greatly (and uses very little per operation). These might be a little tricky to make right now, but are very worthwhile upgrades in the future.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5127,7 +5127,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -5148,8 +5148,20 @@ "Damage:2": 568, "OreDict:8": "", "id:8": "gregtech:meta_item_1" - }, - "1:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 593, "OreDict:8": "", @@ -5315,7 +5327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §a§3§2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n", + "desc:8": "You\u0027ll need a variety of §alenses§r for use in §3Precision Laser Engravers§r, all of which are made in the §2Lathe§r.\n\nInitially you\u0027ll need a §2Ruby Lens§r. Soon you will need §2Diamond, Emerald, Topaz, and Sapphire Lenses§r. §2You can choose to use an MV Lathe to get a lens from a plate, or sift for an Exquisite Gem and use an LV Lathe.\n\n§rAlternatively, you can use §9Sulfuric Acid§r to create §9Chemical Dyes§r of the required color, and use them to make dyed §6Glass Lenses§r. Chemical Dyes can be infinitely looped.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -5365,8 +5377,8 @@ "89:10": { "preRequisites:11": [ 87, - 236, - 130 + 130, + 236 ], "properties:10": { "betterquesting:10": { @@ -5645,7 +5657,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Sulfuric Acid is mainly produced in a 3-step process:§r\n-§6 Sulfur§o§r added to §9Oxygen§r to produce §9Sulfur Dioxide§r. §9SO₂§r also can come from treating certain §6Sulfur-containing Dusts§r with §9Oxygen§r in the EBF, or by processing §eNether Air§r.\n- §9Sulfur Dioxide§r added to more §9Oxygen§r, with §cVanadium Pentoxide§r catalyst, to produce §9Sulfur Trioxide§r.\n- §9Sulfur Trioxide§r added to §9Water§r, to produce §eSulfuric Acid§r.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at EV.\n\nYou can also get Sulfuric Acid by adding §9Oxygen§r to §9Hydrogen Sulfide§r, which can be obtained via Petroleum, or by combining §9Hydrogen§r and §6Sulfur§r.\n\n§rYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things.", + "desc:8": "§9Sulfuric Acid§r is mainly produced in a 3-step process:§r\n\n- §6Sulfur§r added to §9Oxygen§r to produce §eSulfur Dioxide§r. §9SO₂§r also can come from treating certain §6Sulfur-containing Dusts§r with §9Oxygen§r in the EBF, or by processing §eNether Air§r.\n\n- §9Sulfur Dioxide§r added to more §9Oxygen§r, with §cVanadium Pentoxide§r catalyst, to produce §eSulfur Trioxide§r.\n\n- §9Sulfur Trioxide§r added to §9Water§r, to produce §9Sulfuric Acid§r.\n\nThe shortcut Sulfur + Water reaction is locked behind the Large Chemical Reactor, unlocked at §dEV§r.\n\nYou can also get Sulfuric Acid by adding §9Oxygen§r to §9Hydrogen Sulfide§r, which can be obtained via Petroleum, or by combining §9Hydrogen§r and §6Sulfur§r.\n\nYou\u0027ll need huge amounts of this for a whole range of chemical reactions, as it is a very common ingredient.\n\nSulfur can be electrolyzed from many things.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6227,7 +6239,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\nIt is also a §cvery bad idea§r to encode recipes that require GregTech hand tools (even worse with Substitutions on). They are not handled gracefully, causing your crafting computations to explode in complexity and memory requirement.\n\nUse recipes that use machines instead!\n\n", + "desc:8": "§aPatterns§r are used to encode a single crafting table or processing recipe for on-demand automation with §bApplied Energistics§r.\n\nEncode them in a §aPattern Terminal§r.\n\nNote that recipes encoded with Substitutions on will use existing equivalent items, but §ewill only automatically craft the exact item specified in the recipe.§r\n\nIt is also a §cvery bad idea§r to encode recipes that require GregTech hand tools (even worse with Substitutions on). They are not handled gracefully, causing your crafting computations to explode in complexity and memory requirement.\n\nUse recipes that use machines instead!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6330,8 +6342,8 @@ }, "106:10": { "preRequisites:11": [ - 104, - 62 + 62, + 104 ], "properties:10": { "betterquesting:10": { @@ -6439,8 +6451,8 @@ }, "108:10": { "preRequisites:11": [ - 109, - 100 + 100, + 109 ], "properties:10": { "betterquesting:10": { @@ -6499,7 +6511,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to 9 stacks of items for passive autocrafting, Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.\n\n", + "desc:8": "§aME Interfaces§r are extremely important for automation. You\u0027ll be making a lot of these, if you\u0027re playing the pack right.\n\nThese can be filled with encoded §aPatterns§r to perform on-demand autocrafting, and can be configured to stock up to 9 stacks of items for passive autocrafting, Any item pushed into an ME Interface is digitized and placed in your ME Network storage.\n\nWhen adjacent to one or more §aMolecular Assemblers§r, crafting table patterns can be crafted. It will use as many adjacent Molecular Assemblers as possible, restricted by availability and number of §aCo-processors§r in your crafting CPU multiblock.\n\nWhen adjacent to any other block, you can use processing patterns with a machine to insert items into the machine. Processing patterns require that the finished item is inserted back into the ME Network by way of an ME Interface (though it doesn\u0027t need to be the same ME Interface the Pattern is in).\n\nME Interfaces can be wrenched to ensure they only communicate with a particular adjacent block, or can be crafted into a micropart form to fit multiple in the same block space (each micropart only interacting with the adjacent block face).\n\nAlso, if you connect a gadget from §bBuilding Gadgets§r to the Interface, the gadget will pull materials straight from the attached AE2 network, §aNOT§r the Interface. Particularly useful with the §6Auto Chisel§r. \n\nThere is information of the Gadgets, and how to connect them to inventories, in the §eInspector Gadget§r quest in §cGenesis§r, and information of the Auto Chisel in the §eAuto Chisel§r quest in §cMatter Energy§r or §cThe Beginning§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6609,8 +6621,8 @@ }, "111:10": { "preRequisites:11": [ - 105, - 62 + 62, + 105 ], "properties:10": { "betterquesting:10": { @@ -6893,7 +6905,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.", + "desc:8": "§6Black Steel§r will be used to make various items from §bExtended Crafting§r. It will also be the basis of other Steel types later on.\n\nAt first, you will have to create §6Black Bronze Dust§r on the way to §6Black Steel Dust§r. By making an §6HV Mixer§r, you can skip this step with a shortcut recipe.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -6942,8 +6954,8 @@ }, "117:10": { "preRequisites:11": [ - 132, - 102 + 102, + 132 ], "properties:10": { "betterquesting:10": { @@ -7381,7 +7393,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.\n\n", + "desc:8": "§6Stoneburnt§r is a key ingredient in crafting many things from Extra Utilities.\n\nBesides the Manual Mill, there are multiple ways to generate GP. Look up \"Mill\" in JEI for all possible mills.\n\nNote that the individual generators have been balanced differently than normal, so take that into account before building 16 Water Mills. It is a good idea to use several different kinds due to §bExtra Utilities§r implementing diminishing returns to prevent spamming one kind of Mill.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7704,7 +7716,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Vinyl Chloride§r is an industrial chemical made from chlorinating §9Ethylene§r (adding §9Chlorine§r at high temperature) in a §3Chemical Reactor§r. §9Ethane§r can be used as an alternative reagent.\n\nIt is used to create the plastic §9Polyvinyl Chloride§r, most well known as PVC. While it deviates from reality, in GregTech you chemically react Vinyl Chloride and §9Oxygen§r to polymerize it into PVC.\n\nLater, you can use §9Titanium Tetrachloride§r to catalyze this reaction as well for greater yield.\n\n§6PVC Sheets§r are superior to §6Polyethylene Sheets§r for making plastic substrates, producing twice as many §6Plastic Boards§r per craft.\n\n", + "desc:8": "§9Vinyl Chloride§r is an industrial chemical made from chlorinating §9Ethylene§r (adding §9Chlorine§r at high temperature) in a §3Chemical Reactor§r. §9Ethane§r can be used as an alternative reagent.\n\nIt is used to create the plastic §9Polyvinyl Chloride§r, most well known as PVC. While it deviates from reality, in GregTech you chemically react Vinyl Chloride and §9Oxygen§r to polymerize it into PVC.\n\nLater, you can use §9Titanium Tetrachloride§r to catalyze this reaction as well for greater yield.\n\n§6PVC Sheets§r are superior to §6Polyethylene Sheets§r for making plastic substrates, producing twice as many §6Plastic Boards§r per craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -7754,8 +7766,8 @@ "132:10": { "preRequisites:11": [ 35, - 203, - 52 + 52, + 203 ], "properties:10": { "betterquesting:10": { @@ -8090,7 +8102,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6§2Rhodium Plated Lumium-Palladium§r,§6 Vanadium-Gallium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", + "desc:8": "With §2Rhodium Plated Lumium-Palladium§r,§6 Vanadium-Gallium§r, §2and Polyphenylene Sulfide§r, you can now make hulls for Ludicrous Voltage (LuV) §bGregTech§r machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8671,7 +8683,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r. \n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nYou should have set up a §3Vaccum Freezer§r for §6Kanthal§r, but if you haven\u0027t done it yet or want to improve your setup, routing through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering you\u0027re system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", + "desc:8": "Combining §9Titanium Tetrachloride§r with §6Magnesium§r in an §3Electric Blast Furnace§r (approximating the Kroll process) will net you your first §6Titanium§r.\n\nThis process is a loop, and therefore will not cost you any resources, apart from §6Rutile§r, if you process it correctly. \n\nUnfortunately, it is super hot. You\u0027ll need to cool it in a §3Vacuum Freezer§r for it to be usable.\n\nRouting through AE is an alternative way to using item conduits. Simply set an Ore Dictionary Storage Bus on the input bus of the freezer, set it to \u0027ingotHot*\u0027, and set it to a high piority. This will accept any new Hot Ingots entering your system, and eliminates the need for a big conduit network.\n\nDon\u0027t encode the Hot Ingot in a pattern though!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8711,7 +8723,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Vacuum Freezers§r are primarily used to cool down hot ingots.\n\nThey\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", + "desc:8": "§3Vacuum Freezers§r are primarily used to cool down §6Hot Ingots§r. They\u0027re also capable of freezing air into a liquid, and making superconductors.\n\nAt minimum you will need an energy input hatch, an input bus, an output bus, and 22 §6Frost Proof Machine Casings§r for forming the multiblock for processing Hot Ingots.\n\nIf you want to deal with fluids as well, subtract two casings and use a fluid input and fluid output in their place.\n\nThe energy tier required for the Vacuum Freezer is typically one tier below the tier used to process the ingot in the §3Electric Blast Furnace§r. \n\nBesides the controller placement, as usual the hatches/buses can go anywhere. Use the building guide in §bJEI§r which can be pulled up from the controller block.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8752,6 +8764,12 @@ "Damage:2": 1002, "OreDict:8": "", "id:8": "gregtech:machine" + }, + "1:10": { + "Count:3": 14, + "Damage:2": 3, + "OreDict:8": "", + "id:8": "gregtech:metal_casing" } }, "taskID:8": "bq_standard:retrieval" @@ -8766,7 +8784,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§6§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.\n\n", + "desc:8": "§6Rutile§r is a §6Titanium§r precursor found in §6Ilmenite Ore§r and §6Bauxite Ore§r, which spawn uncommonly in the Overworld.\n\n§rLarger quantities of Ilmenite and Bauxite may be found on the Moon and other planets.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -8929,7 +8947,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "It\u0027s finally time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The § §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", + "desc:8": "It\u0027s finally time to make a §3Distillation Tower§r, which is the gatekeeper for more advanced plastics like §6Epoxy§r and doing petrochemistry.\n\nThe Distillation Tower is a highly flexible multiblock structure, able to be anywhere from §62 blocks high to up to 13 high§r (12 fluid outputs). The way that it works is that each level of the tower after the first will output an additional fluid from the recipe. §cAny output fluids in excess of available buses are voided§r. \n\nWhat you need the Distillation Tower for initially is to break down §9Oil§r and §9Fermented Biomass§r into useful resources.§9 Oil§r distillation, with its four outputs, will require a §efive-block-high Distillation Tower§r (the quest materials are for such a tower; if you want to build it bigger, you will need §ean additional 7 casings and 1 fluid output per floor§r).\n\nAny recipe with more than four output fluids (like §9Fermented Biomass§r) will need a larger tower. Make sure to increase the height of your tower to accommodate all of the outputs you want to keep. Also check the voltage requirements of the recipes, as many Distillation Tower recipes need higher voltages than MV. §eYou can swap out your Energy Input for a higher tier one when that time comes§r. Also, any recipe that has an item output will need an §6Output Bus§r, anywhere on the bottom layer.\n\nThe tower we\u0027ll be building at first is 3x3x5 (LxWxH), with a hollow center. The §6Fluid Input Hatch§r §2can go anywhere on the bottom layer.§r. The §6controller§r goes in the middle of an outer edge of the bottom layer. The §6Energy Input Hatch§r can go wherever you can fit it on the bottom layer. The rest of the 3x3 must be filled with §6Clean Stainless Steel Casings§r.§2 You also need a Maintenance Hatch, which can go anywhere on the structure.§r Each level above that is a ring of 7 Clean Stainless Steel Casings, one §6Fluid Output§r and nothing in the center, except for the topmost layer which needs an eighth casing to fill in the center, capping off the top. \n\nFor distilling fluids which only have one useful output, like §9Biomass§r, it is recommended to use single-block Distilleries, due to their energy efficiency and generally lower costs.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9060,9 +9078,9 @@ "156:10": { "preRequisites:11": [ 60, - 1040, 91, - 836 + 836, + 1040 ], "properties:10": { "betterquesting:10": { @@ -9175,7 +9193,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Nichrome§r is an alloy of §6Nickel§r and §6Chrome§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9664,7 +9682,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Water§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", + "desc:8": "§9Hydrogen Sulfide§r is a byproduct of hydrodesulfurization. §2It also comes from distilling Liquid Nether Air.§r\n\nA simple chemical reaction with §9Oxygen§r reprocesses it into the useful §9Sulfuric Acid§r, or it can be electrolyzed for recovering the §9Hydrogen§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9719,7 +9737,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Diesel§r is a mixture of §9Light Fuel§r and §9Heavy Fuel§r. Each mB of Diesel generates §d480 EU§r in §3Combustion Generators§r.\n\nOnce you get HV machinery, you can upgrade this to §9Cetane-Boosted Diesel§r.\n\n§2§rIt\u0027s more power efficient to use §3singleblock Distilleries§r over a §3Distillation Tower§r for Oil, due to the overclocking mechanics being different. For Diesel, the correct ratio is §d3 Distilleries for Light Oil and 2 Distilleries for Heavy Oil§r.", + "desc:8": "§9Diesel§r is a mixture of §9Light Fuel§r and §9Heavy Fuel§r. Each mB of Diesel generates §d480 EU§r in §3Combustion Generators§r.\n\nOnce you get HV machinery, you can upgrade this to §9Cetane-Boosted Diesel§r.\n\n§rIt\u0027s more power efficient to use §3singleblock Distilleries§r over a §3Distillation Tower§r for Oil, due to the overclocking mechanics being different. For Diesel, the correct ratio is §d3 Distilleries for Light Oil and 2 Distilleries for Heavy Oil§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9881,7 +9899,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.\n", + "desc:8": "§9Air§r can be sent into the §3Vacuum Freezer§r to turn it into §9Liquid Air§r.\n\n§9Liquid Air§r can be sent into a §2Distillation Tower§r to break it down into its components.\n\n§2Liquid Nether Air and Liquid Ender Air give different useful components too.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -9936,7 +9954,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The reaction that produces §9Bio Diesel§r is also the only source of §9Glycerol§r, which is an easy way to make §9Epichlorohydrin§r, an important ingredient of §9Epoxy§r.\n\n§9Glycerol§r is also used in the production of §9§9Glyceryl Trinitrate§r, an important step in making §6Dynamite§r, which can be used later in the §9§r§3Implosion Compressor§r.\n\nEven if you\u0027re otherwise going all in on petrochemistry for Epoxy, you\u0027ll probably end up with some Bio Diesel as a result of making Glycerol.\n\nBio Diesel can be used for power, but is probably better to convert to §2Cetane-Boosted Diesel§r.", + "desc:8": "The reaction that produces §9Bio Diesel§r is also the only source of §9Glycerol§r, which is an easy way to make §9Epichlorohydrin§r, an important ingredient of §9Epoxy§r.\n\n§9Glycerol§r is also used in the production of §9Glyceryl Trinitrate§r, an important step in making §6Dynamite§r, which can be used later in the §3Implosion Compressor§r.\n\nEven if you\u0027re otherwise going all in on petrochemistry for Epoxy, you\u0027ll probably end up with some Bio Diesel as a result of making Glycerol.\n\nBio Diesel can be used for power, but is probably better to convert to §2Cetane-Boosted Diesel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10045,7 +10063,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.\n\n", + "desc:8": "Note: this quest accepts LV/MV/HV/EV §3Gas Collectors§r.\n\nA §3Gas Collector§r will suck up air at a decent rate, provided the top side is unobstructed. The collected Air is automatically ejected into an adjacent tank via the output face.\n\n§2Gas Collectors in the Nether and End will collect Nether Air and Ender Air respectively, which yield different products.§r\n\nIV+ air collectors are not part of this quest, but for reference they exist and are called §3Atmosphere Collectors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -10986,6 +11004,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 569, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -11332,12 +11368,12 @@ }, "197:10": { "preRequisites:11": [ - 201 + 311 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6Tungstensteel§r is an alloy of §6Tungsten§r and §6Steel§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -11976,7 +12012,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.\n\n", + "desc:8": "At some point you might consider venturing into space, like the Moon. While it\u0027s not at all required for the progression, you might find it valuable: to say the least, the Moon contains ore veins which are otherwise very rare to find in the Overworld. And for this, you\u0027ll need a rocket and a whole lot of preparations.\n\nBefore you can build the rocket itself, you\u0027ll need to create a launch pad. The §6Launch Pad§r blocks go in a 3x3 layout flat on the ground to form the platform.\n\nThe Structure Tower§r is formed from a column of §6Structure Tower§r blocks that holds your rocket upright. The first block goes adjacent to any side of the launch pad platform (on the same Y-level as the launch pad blocks).\n\nWith 6 Structure Tower blocks, you can only build a rocket 5 blocks high, since any higher would exceed the height of the tower. To build a taller rocket, you\u0027ll need to build a taller tower using more Structure Tower blocks.\n\nThe §3Rocket Assembling Machine§r needs to be placed next to the launch pad (not on it) 1 block higher than the platform, so that the bottom of the Rocket Assembler is flush with the top of the launch pad. It also needs to be supplied with RF power to function.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12096,7 +12132,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r. ", + "desc:8": "Even simple rockets demand §6Double Plates§r for their construction. In this case, made out of §6Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12205,7 +12241,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.\n", + "desc:8": "The §3Fueling Station§r is how rockets get fuel.\n\nFirst, put together your Rocket, then §aScan§r and §cBuild§r the Rocket in the §3Rocket Assembling Machine§r to assemble it (which turns it into an entity). Next, with the §aLinker§r in your hand, right-click the Fueling Station then the Rocket Assembling Machine to link the Fueling Station to the constructed Rocket. \n\nYou\u0027ll get a confirmation message when you do it right, and a little line will appear between the Fueling Station and the rocket.\n\nNow just get §9Rocket Fuel§r into the Fueling Station and it will transfer to the Rocket automatically.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12326,13 +12362,13 @@ }, "214:10": { "preRequisites:11": [ - 232, - 55 + 55, + 232 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Rutile Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).\n\n\n", + "desc:8": "The Moon is a barren, lifeless rock... So why did you want to come here?\n\nOne major draw is that §6Moon Turf§r, which makes up the surface of the Moon, is an efficient means of obtaining §9Deuterium§r. It will be useful for producing §9Microversium§r, §9Tritium§r, plasmas from fusion, and crystallizing §6Dilithium§r.\n\nThe Moon also contains fluid deposits of §eDeuterium§r and §eHelium-3§r, which you can harvest with a §3Fluid Rig§r. However, you will want to use the second Fluid Rig tier to extract it, as the amount of Deuterium and Helium-3 is too low to be anything appreciable from a first tier Fluid Rig.\n\nSpace exploration isn\u0027t mandatory in this pack, so if you don\u0027t feel like exploring space with §bAdvanced Rocketry§r, then you can centrifuge §9Hydrogen§r for §eDeuterium§r instead.\n\nJust keep in mind that it\u0027s much less rewarding to skip this and you\u0027ll need lots of Hydrogen to compensate, although you won\u0027t need too much for the first §3Microverse Projector§r.\n\nIn §6HV§r Age and more effectively in §1IV§r Age, you can also get this from processing §9Ender Air§r, which may be better than going to the moon, depending on your circumstances.§r\n\nThere are also several ores that are rare on the Overworld but exist in abundance on the Moon. In particular, the Moon contains large quantities of §6Titanium§r (in the form of §6Bauxite Ore§r and §6Ilmenite Ore§r) and §6Tungsten§r (in the form of §6Scheelite Ore§r and §6Tungstate Ore§r).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -12436,8 +12472,8 @@ "216:10": { "preRequisites:11": [ 89, - 897, - 214 + 214, + 895 ], "properties:10": { "betterquesting:10": { @@ -12565,7 +12601,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n§\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.\n\n", + "desc:8": "This is your first Micro Miner ever. §2You\u0027ll need that Phosphorous in the LV Field Generators.§r\nYes, not the last: these things aren\u0027t reusable.\n\nThis one can get you:\n§6* Dense Iron Ore\n* Cassiterite Ore\n* Redstone Ore\n* Nickel Ore\n§2* Imenite Ore§r\n§6* Uraninite Ore\n* Galena Ore\n§2* Molybdenum Ore§r\n§6* Moon Turf\n* Dilithium\n* Salt Ore§r\n\nWhen equipped with a Gemstone Sensor (which may currently not be available to you yet):\n§2* Perfect Diamond\n§6* Apatite Ore\n* Tricalcium Phosphate Ore\n* Quartzite Ore§r\n\nCan also be used to bring §bStellar Creation Data§r, but less efficiently than the Tier Two.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13072,7 +13108,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.\n", + "desc:8": "Here comes the chemistry.\n\nIt might seem crazy right now, but you\u0027ll want a dedicated §3Chemical Reactor§r for pretty much every chemical you want to process. You probably want to hold off on doing that until you\u0027ve got a solid base of autocrafting though... it stings a lot less when you can just request crafts of Chemical Reactors from your AE2 system.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13121,13 +13157,13 @@ }, "228:10": { "preRequisites:11": [ - 490, - 29 + 29, + 490 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThis quest calls for a §aRedstone Timer§r, but there are other ways to make snad grow sugar cane even faster (like a vanilla observer clock pointing into the Snad). Make sure to set the timer to pulse as fast as possible.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", + "desc:8": "Yes, Snad.\n\nThis pack has §aSnad§r, which is simply a sand-like block that instantly grows sugar cane/cactus on top of it when it receives either a block update or a redstone update.\n\nThe sugar cane it produces can be used as a fuel for your dynamos, and later you can even brew it for §9Biomass§r.\n\nThe premier way to activate Snad is with a §6Redstone Conduit§r. By force-connecting the conduit to the side of the Snad block with a Wrench, and inserting a §aSensor Filter§r, you can get the highest growth rate possible. Simpler methods such as a §aRedstone Clock§r can also work, but not as effectively.\n\nTo collect the sugar cane, you can use a piston and an observer. Later you can make an §6Auto-Breaker§r from §bActually Additions§r, which works even better and doesn\u0027t spill sugar cane everywhere.\n\nFor now, a §3Vacuum Chest§r should help keep the floor clean, and causes less lag than Hoppers. A §aVoid Upgrade§r in a §6Storage Drawer§r will automatically delete any items that overflow the drawer\u0027s capacity, so it\u0027s a good way to ensure you don\u0027t crash your server from accumulating a massive sugar cane pile before safer block breakers are available to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13174,21 +13210,39 @@ "Damage:2": 0, "OreDict:8": "", "id:8": "enderio:block_vacuum_chest" - }, - "2:10": { + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", - "id:8": "extrautils2:redstoneclock" + "id:8": "enderio:item_redstone_conduit" }, - "3:10": { + "1:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "enderio:item_redstone_sensor_filter" + }, + "2:10": { "Count:3": 1, "Damage:2": 0, "OreDict:8": "", "id:8": "storagedrawers:upgrade_void" } }, - "taskID:8": "bq_standard:retrieval" + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -13660,14 +13714,14 @@ "238:10": { "preRequisites:11": [ 241, + 258, 330, - 411, - 258 + 411 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r§r and the other items are otherwise craftable.", + "desc:8": "The Eighth Micro Miner.\n\nThe main source of §6Chaos Shards§r.\n\nThe other mission gives negligible amounts of §6Neutronium§r and some other moderately useful things, but you\u0027re better off making Neutronium in the §3Fusion Reactor Mark 3§r and the other items are otherwise craftable.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13778,7 +13832,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a decent quantity of §6Neutronium§r, but you have to bootstrap it with some Neutronium from the §3Fusion Reactor Mark 3§r anyway. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", + "desc:8": "The Ninth Micro Miner.\n\nCombines §bStellar Creation Data§r into the §dUniverse Creation Data§r, which is a crucial component for the Tier Ten Micro Miner mission.\n\nThe alternate mission brings a large quantity of §6Neutronium§r. It might be easier to just make all your Neutronium in the reactor, but it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -13833,7 +13887,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Eight Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14473,7 +14527,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Fifth Micro Miner.\n\nThe only source of §6Naquadah§r, in the form of §cSnowchestite Ore§r. Along with it, § §2Kaemanite Ore§r (for §6Trinium§r), and §cPollucite Ore§r (for §6Caesium§r).\n\nWhen provided with §6Stabilized Uranium§r, brings:\n§6§2* Uraninite Ore§6\n* Palladium Ore\n§2* Realgar Ore\n§6* Bastnasite Ore\n* Sphalerite Ore\n* Monazite Ore\n§2* Enderpearl Blocks\n* Osmiridium 80/20 Ore\n* Iridosmine 80/20 Ore\n§6* Boron Dust\n* Molybdenite Ore\n* Beryllium Ore\n* Fluorite Ore", + "desc:8": "The Fifth Micro Miner.\n\nThe only source of §6Naquadah§r, in the form of §cSnowchestite Ore§r. Along with it, §2Kaemanite Ore§r (for §6Trinium§r), and §cPollucite Ore§r (for §6Caesium§r).\n\nWhen provided with §6Stabilized Uranium§r, brings:\n§2* Uraninite Ore§6\n* Palladium Ore\n§2* Realgar Ore\n§6* Bastnasite Ore\n* Sphalerite Ore\n* Monazite Ore\n§2* Enderpearl Blocks\n* Osmiridium 80/20 Ore\n* Iridosmine 80/20 Ore\n§6* Boron Dust\n* Molybdenite Ore\n* Beryllium Ore\n* Fluorite Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14581,7 +14635,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The Sixth Micro Miner.\n\nThe first decent source of §6Dragon Eggs§r and §6Stabilized Einsteinium§r.\n\nIs also useful for:\n§6§2* Uraninite Ore\n§c* Sheldonite Ore\n* Iridosmine 80/20 Ore", + "desc:8": "The Sixth Micro Miner.\n\nThe first decent source of §6Dragon Eggs§r and §6Stabilized Einsteinium§r.\n\nIs also useful for:\n§2* Uraninite Ore\n§c* Sheldonite Ore\n* Iridosmine 80/20 Ore", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14745,7 +14799,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner. ", + "desc:8": "§2Double Plates§r used exclusively for the Tier Seven Micro Miner.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -14799,7 +14853,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Awakened Draconium§r is a powerful material used for crafting high-grade components, items, and machines from §bDraconic Evolution§r.\n\nFive §6§6Draconium Blocks§r can be processed in a Wyvern Tier fusion crafting setup to create an equal output of five §6Awakened Draconium Blocks§r. At §e24 Billion RF per craft§r, you better have a handle on your power infrastructure.", + "desc:8": "§6Awakened Draconium§r is a powerful material used for crafting high-grade components, items, and machines from §bDraconic Evolution§r.\n\nFive §6Draconium Blocks§r can be processed in a Wyvern Tier fusion crafting setup to create an equal output of five §6Awakened Draconium Blocks§r. At §e24 Billion RF per craft§r, you better have a handle on your power infrastructure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15018,7 +15072,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes. ", + "desc:8": "An advanced ingredient used for the §aUltimate Extended Crafting Table§r and other late-game recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15072,7 +15126,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Small Piles of Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.\n", + "desc:8": "§6Indium§r is a rare material requiring specialized bulk ore processing to acquire. It is useful for making §6Indium Gallium Phosphide§r (InGaP).\n\nYou will need to purify (with a §3Washer§r or §3Chemical Bath§r) §6Galena§r and §6Sphalerite§r to get §6Crushed Purified§r dusts. These need to be placed together in a §3Chemical Reactor§r along with §9Sulfuric Acid§r, which will result in §9Indium Concentrate§r.\n\nThis in turn needs to be reacted with §6Aluminium§r in another Chemical Reactor, to create §2Indium Dust, Aluminium Sulfite and §9Lead-Zinc Solution§r. The latter two can be centrifuged into various useful materials, and the Indium piles can be combined into full dusts.\n\nThere is an alternative recipe set to §9Programmed Circuit §64§r, which performs the recipe in a larger batch and §2allows you to skip combining small piles into full dusts.§r\n\n§2Indium can also be obtained from the Naquadah processing chain in LuV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15128,7 +15182,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With your new §6§6§ §6Epoxy Circuit Boards§r, §6QBit CPUs§r, and some standard components, you can make the final type of Tier Four Circuit: the §6Quantum Circuit§r.\n\nAs the best form of Tier Four circuit, these should be automated and stockpiled. The variant recipe requiring §6Advanced System-on-Chip§r won\u0027t be available until ZPM.", + "desc:8": "With your new §6Epoxy Circuit Boards§r, §6QBit CPUs§r, and some standard components, you can make the final type of Tier Four Circuit: the §6Quantum Circuit§r.\n\nAs the best form of Tier Four circuit, these should be automated and stockpiled. The variant recipe requiring §6Advanced System-on-Chip§r won\u0027t be available until ZPM.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15237,7 +15291,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Item Pipes are back in GTCEu! They will transport items instantly through them.§r\n\nThis quest accepts a §bGregTech §6Item Pipe§r of any material, and size and of both normal and restrictive variants.\n\nTheir advantage over §bEnderIO§r §6Item Conduits§r is their far higher §6throughput§r. An unupgraded EIO Item Conduit transports §2§r§38 items per second§r, and up to §3128§r when upgraded. In comparison, small low-tier Item Pipes can transfer §364 items per second§r, and those made from later materials can transfer multiple stacks per second.\n\nFurthermore, with a §6Robot Arm§r cover, these can do perfect §3Round-Robin§r, equally spliiting the items between the §eDestinations§r.\n\nFor now, the recommended material to use for these is §6Tin§r.\n\nThey don\u0027t §3auto-extract§r by themselves, so you have to use §6Conveyor§r covers etc. with them.\n\nThe priority mechanics are more complicated, so skip ahead if you are not interested:\nA §eDestination§r will have a §3Routing Value§r calculated, which is the sum of all §3Routing Values§r of the individual Pipes to that §eDestination§r. Whichever §eDestination§r has the lowest §3Routing Value§r will be the one selected for Insertion.\n§6Restrictive Pipes§r typically have the lowest §3Priority§r for insertion due to their higher §3Routing Value§r.", + "desc:8": "§2Item Pipes are back in GTCEu! They will transport items instantly through them.§r\n\nThis quest accepts a §bGregTech §6Item Pipe§r of any material, and size and of both normal and restrictive variants.\n\nTheir advantage over §bEnderIO§r §6Item Conduits§r is their far higher §6throughput§r. An unupgraded EIO Item Conduit transports §38 items per second§r, and up to §3128§r when upgraded. In comparison, small low-tier Item Pipes can transfer §364 items per second§r, and those made from later materials can transfer multiple stacks per second.\n\nFurthermore, with a §6Robot Arm§r cover, these can do perfect §3Round-Robin§r, equally spliiting the items between the §eDestinations§r.\n\nFor now, the recommended material to use for these is §6Tin§r.\n\nThey don\u0027t §3auto-extract§r by themselves, so you have to use §6Conveyor§r covers etc. with them.\n\nThe priority mechanics are more complicated, so skip ahead if you are not interested:\nA §eDestination§r will have a §3Routing Value§r calculated, which is the sum of all §3Routing Values§r of the individual Pipes to that §eDestination§r. Whichever §eDestination§r has the lowest §3Routing Value§r will be the one selected for Insertion.\n§6Restrictive Pipes§r typically have the lowest §3Priority§r for insertion due to their higher §3Routing Value§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15617,7 +15671,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Mixes dusts together.\n\nFor now, you\u0027ll be using it to make §6Energetic Alloy Dust§r.\n\nEnergetic Alloy Dust is made from §6Redstone§r, §6Gold Dust§r and §6Glowstone Dust§r. \n\nYou should have some Glowstone from your adventures in the §cNether§r, but you can also make it by mixing §6Tricalcium Phosphate Dust§r§r§r and §6§6§6Gold Dust§r§r§r.", + "desc:8": "Mixes dusts together.\n\nFor now, you\u0027ll be using it to make §6Energetic Alloy Dust§r.\n\nEnergetic Alloy Dust is made from §6Redstone§r, §6Gold Dust§r and §6Glowstone Dust§r. \n\nYou should have some Glowstone from your adventures in the §cNether§r, but you can also make it by mixing §6Tricalcium Phosphate Dust§r and §6Gold Dust§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15925,7 +15979,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.\n\n", + "desc:8": "\"§6Dragon Eggs§r?\" You might ask. Yep.\n\nThe final circuit theme, Wetware, will require a lot of them.\n\nTier Six Micro Miners can get some eggs (enough for this quest, as it happens), but Tier Seven miners are a better long-term solution for building up your supply, as they also give §6Dragon Hearts§r.\n\nLater, you\u0027ll also get substantial quantities from Tier Eight Micro Miners, while you are accumulating §6Chaos Shards§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -15934,7 +15988,7 @@ "id:8": "minecraft:dragon_egg" }, "ignoresview:1": 0, - "ismain:1": 0, + "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, "name:8": "Breaking Some Eggs", @@ -16209,7 +16263,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With your §6§2Rhodium Plated Lumium-Palladium§r-based machine hulls, Assembling Machine built, and §6Quantum Processor Mainframes§r squared away, you can finally get on the path to making a Ludicrous Voltage §3Circuit Assembling Machine§r.\n\nThis tier of Assembling Machine unlocks §6Crystal Circuits§r, as well as handling crafting recipes up to 32768 EU/t. It can also optionally overclock recipes that consume up to 8192 EU/t for improved speed at the cost of relatively more power.", + "desc:8": "With your §2Rhodium Plated Lumium-Palladium§r-based machine hulls, Assembling Machine built, and §6Quantum Processor Mainframes§r squared away, you can finally get on the path to making a Ludicrous Voltage §3Circuit Assembling Machine§r.\n\nThis tier of Assembling Machine unlocks §6Crystal Circuits§r, as well as handling crafting recipes up to 32768 EU/t. It can also optionally overclock recipes that consume up to 8192 EU/t for improved speed at the cost of relatively more power.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16449,13 +16503,13 @@ "287:10": { "preRequisites:11": [ 234, - 847, - 286 + 286, + 847 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Time to get fusing!\n\nThe §3Fusion Reactor§r is a multiblock that uses enormous amounts of energy to fuse fluids into new elements. This one is less flexible than the previous GregTech multiblocks, as you can only put hatches where the preview shows. §6Sneak-right click§r the controller to enable the in-world preview.\n\nThe §bJEI§r preview shows §e§eall valid hatch locations§r, but you don\u0027t actually need that many fluid hatches. You can replace any of the hatch positions in the structure with §2Fusion Glass or Fusion Machine Casings§r as long as you have at least §atwo Fluid Input Hatches§r and §aone Fluid Output Hatch§r. It\u0027s possible to use input/output hatches in every valid location, if you prefer.\n\nBecause of this, the quest only asks for §248 Fusion Machine Casings§r. If you want to use the minimum number of fluid hatches, you\u0027ll need to craft an additional §229 Fusion Machine Casings§r. In addition to the §a48 Fusion Machine Casings§r, you will also need §631 Fusion Glass§r or §631 Fusion Machne Casings§r. §bFusion Glass is cheaper, and looks cooler§r, but its your choice.\n\nEach §aEnergy Hatch§r increases the reactor\u0027s power buffer. §2You cannot use 4x or 16x Energy Hatches in Fusion Reactors. §aAll 16 Energy Hatches§r are required to be able to process all Mark 1 recipes and give a power buffer of §e160M EU§r. §2However, not all energy hatches are needed to be connected to power. For example, a recipe that requires LuV power draw would only need one or more hatches connected to power, but a recipe that needs ZPM power draw would need two hatches connected to power.§r §cThey still need to be present on the structure!§r\n\nIn addition to the recipe power drain, Fusion Reactors have a §eheat§r mechanic related to the recipe\u0027s §e\"Eu to Start\"§r. This amount of power is drained from the reactor\u0027s buffer before starting the recipe to heat up the reactor to the necessary temperature, and is independent of the recipe\u0027s EU/t cost. As such, this determines the minimum tier of reactor you need for a recipe.\n\nIf the reactor stops processing, it will §erapidly lose heat§r, even if you pause it with a soft hammer. On the other hand, if the reactor is already at the required temperature for a recipe, §eno additional power§r is required to heat up the reactor! This is true even if you switch between different recipes. This mechanic incentivizes continuous use of the reactor.\n\nIf you switch to a recipe that requires more heat, §eonly the difference§r in heat values is consumed as EU to reach the target heat (up to a maximum heat equal to the reactor\u0027s current buffer).\n\nFusion Reactors §2overclock, but only once per fusion tier, instead of based on energy input.§r They gate the next tier of materials, so you will eventually want to make more than one.", + "desc:8": "Time to get fusing!\n\nThe §3Fusion Reactor§r is a multiblock that uses enormous amounts of energy to fuse fluids into new elements. This one is less flexible than the previous GregTech multiblocks, as you can only put hatches where the preview shows. §6Sneak-right click§r the controller to enable the in-world preview.\n\nThe §bJEI§r preview shows §eall valid hatch locations§r, but you don\u0027t actually need that many fluid hatches. You can replace any of the hatch positions in the structure with §2Fusion Glass or Fusion Machine Casings§r as long as you have at least §atwo Fluid Input Hatches§r and §aone Fluid Output Hatch§r. It\u0027s possible to use input/output hatches in every valid location, if you prefer.\n\nBecause of this, the quest only asks for §248 Fusion Machine Casings§r. If you want to use the minimum number of fluid hatches, you\u0027ll need to craft an additional §229 Fusion Machine Casings§r. In addition to the §a48 Fusion Machine Casings§r, you will also need §631 Fusion Glass§r or §631 Fusion Machne Casings§r. §bFusion Glass is cheaper, and looks cooler§r, but its your choice.\n\nEach §aEnergy Hatch§r increases the reactor\u0027s power buffer. §2You cannot use 4x or 16x Energy Hatches in Fusion Reactors. §aAll 16 Energy Hatches§r are required to be able to process all Mark 1 recipes and give a power buffer of §e160M EU§r. §2However, not all energy hatches are needed to be connected to power. For example, a recipe that requires LuV power draw would only need one or more hatches connected to power, but a recipe that needs ZPM power draw would need two hatches connected to power.§r §cThey still need to be present on the structure!§r\n\nIn addition to the recipe power drain, Fusion Reactors have a §eheat§r mechanic related to the recipe\u0027s §e\"Eu to Start\"§r. This amount of power is drained from the reactor\u0027s buffer before starting the recipe to heat up the reactor to the necessary temperature, and is independent of the recipe\u0027s EU/t cost. As such, this determines the minimum tier of reactor you need for a recipe.\n\nIf the reactor stops processing, it will §erapidly lose heat§r, even if you pause it with a soft hammer. On the other hand, if the reactor is already at the required temperature for a recipe, §eno additional power§r is required to heat up the reactor! This is true even if you switch between different recipes. This mechanic incentivizes continuous use of the reactor.\n\nIf you switch to a recipe that requires more heat, §eonly the difference§r in heat values is consumed as EU to reach the target heat (up to a maximum heat equal to the reactor\u0027s current buffer).\n\nFusion Reactors §2overclock, but only once per fusion tier, instead of based on energy input.§r They gate the next tier of materials, so you will eventually want to make more than one.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -16590,12 +16644,12 @@ }, "289:10": { "preRequisiteTypes:7": [ - 0, - 2 + 1, + 0 ], "preRequisites:11": [ - 839, - 313 + 313, + 839 ], "properties:10": { "betterquesting:10": { @@ -17149,7 +17203,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.\n\n", + "desc:8": "This casing is the structure for §bThermal Expansion§r\u0027s devices, which are simpler machines.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17257,7 +17311,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, a §6Snowball§r, and §6Blizz Powder§r creates §6Cryotheum Dust§r, a mixture imbued with potent elemental frost.", + "desc:8": "§6Redstone§r, a §6Snowball§r, and §6Blizz Powder§r creates §6Cryotheum Dust§r, a mixture imbued with potent elemental frost.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17311,7 +17365,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, §6Saltpeter§r, and §6Blitz Powder§r creates §6Aerotheum Dust§r, a mixture imbued with potent elemental air.", + "desc:8": "§6Redstone§r, §6Saltpeter§r, and §6Blitz Powder§r creates §6Aerotheum Dust§r, a mixture imbued with potent elemental air.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17365,7 +17419,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, §6Obsidian Dust§r, and §6Basalz Powder§r creates §6Petrotheum Dust§r, a mixture imbued with potent elemental earth.", + "desc:8": "§6Redstone§r, §6Obsidian Dust§r, and §6Basalz Powder§r creates §6Petrotheum Dust§r, a mixture imbued with potent elemental earth.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17419,7 +17473,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Redstone§r, §6Sulfur§r, and §6Blaze Powder§r creates §6Pyrotheum Dust§r, a mixture imbued with potent elemental flame.", + "desc:8": "§6Redstone§r, §6Sulfur§r, and §6Blaze Powder§r creates §6Pyrotheum Dust§r, a mixture imbued with potent elemental flame.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17821,12 +17875,13 @@ }, "311:10": { "preRequisites:11": [ - 197 + 201, + 827 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Tungstensteel§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", + "desc:8": "§6RTM-Alloy§r is the fourth coil material available, increasing your EBF\u0027s operating temperature to 4500K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -17838,7 +17893,7 @@ "ismain:1": 1, "issilent:1": 0, "lockedprogress:1": 1, - "name:8": "Tungstensteel Coil Blocks", + "name:8": "RTM-Alloy Coil Blocks", "partysinglereward:1": 0, "questlogic:8": "AND", "repeat_relative:1": 1, @@ -17880,7 +17935,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.\n", + "desc:8": "§6HSS-G§r is an alloy of §6Tungstensteel§r, §6Chrome§r, §6Molybdenum§r, and §6Vanadium§r.\n\nThis alloy is cooked in an §3Electric Blast Furnace§r and cooled in a §3Vacuum Freezer§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18583,7 +18638,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With a §3Fusion Reactor§r, you can make Europium!\n\nThis element is needed for making things in §bDraconic Evolution§r§r, as well as the §6Fusion Reactor Computer Mark 2§r, §2Crystal Chip growing§r, and §6Wetware Supercomputers§r§r.\n\nYou make it by fusing molten §9§9Neodymium§r§r and §9Hydrogen§r.", + "desc:8": "With a §3Fusion Reactor§r, you can make Europium!\n\nThis element is needed for making things in §bDraconic Evolution§r, as well as the §6Fusion Reactor Computer Mark 2§r, §2Crystal Chip growing§r, and §6Wetware Supercomputers§r.\n\nYou make it by fusing molten §9Neodymium§r and §9Hydrogen§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -18676,7 +18731,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.\n", + "desc:8": "Just ignore the protesters outside your base.\n\nEach craft in an §3LuV Chemical Reactor§r takes five minutes, so it\u0027s probably a good idea to have more than one machine running this recipe. At least you get §2128 from a single craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19112,7 +19167,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.\n", + "desc:8": "The final circuit!\n\nThe only novel ingredient is §6Tritanium Frames§r.\n\n§6Wetware Processor Mainframes§r are unique in that there are no subsquent circuit themes, and thus no other kinds of Tier Nine circuits. Unlike past mainframes, you will need to craft more than just a few of them. They\u0027re mostly used in the Endgame though, so you don\u0027t have to worry too much yet.\n\nDefinitely consider parallelizing your §3Assembly Lines§r if you haven\u0027t already. Even just having two or three lines will vastly improve your production speeds and help avoid bottlenecks as you push towards the Endgame.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19333,7 +19388,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\n§2Starting at EV, 4A Energy and Dynamo hatches are available at each tier.", + "desc:8": "With §6Titanium§r smelting automated, you can now build Machine Hulls for Extreme Voltage machines.\n\nEV motors require a better material than §6Steel§r for its magnetism.§6\n\nNeodynium§r is required, which is mainly achieved from §6Rare Earth§r. The main sources of this are §6Redstone§r, and everything inside of §6Bastnasite§r veins.\n\nEV Machine Hulls unlock a handful of nice things. Check the surrounding quests for more information.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -19387,7 +19442,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An Extreme Voltage tier §bGregTech§r battery.\n\n§3§2Higher tier GT Batteries have been buffed to be quite strong - this one holds 25 MEU, or 100 MRF. You may want to consider using them over RF storage.", + "desc:8": "An Extreme Voltage tier §bGregTech§r battery.\n\n§2Higher tier GT Batteries have been buffed to be quite strong - this one holds 25 MEU, or 100 MRF. You may want to consider using them over RF storage.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -20289,7 +20344,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This ingot is the most advanced basic material.\n\nWith all the automation you hopefully set up for your first §c§cInfinity Catalyst§r, these ingots should be easy.\n\nWell, not easy. But... Reasonable.\n\nFrom here, you are going to be crafting a multitude of Creative-Tier items from various mods. In addition to being useful for their regular functionality, they are needed for the final goal: the §dCreative Chest§r.\n\n§bJEI§r is your friend: beyond noting a few more items, I will not be holding your hand anymore. I\u0027ve taught you everything you need to know to beat the pack.\n\nYou can do it!", + "desc:8": "This ingot is the most advanced basic material.\n\nWith all the automation you hopefully set up for your first §cInfinity Catalyst§r, these ingots should be easy.\n\nWell, not easy. But... Reasonable.\n\nFrom here, you are going to be crafting a multitude of Creative-Tier items from various mods. In addition to being useful for their regular functionality, they are needed for the final goal: the §dCreative Chest§r.\n\n§bJEI§r is your friend: beyond noting a few more items, I will not be holding your hand anymore. I\u0027ve taught you everything you need to know to beat the pack.\n\nYou can do it!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -21858,7 +21913,6 @@ }, "389:10": { "preRequisites:11": [ - 251, 262, 386 ], @@ -22380,7 +22434,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nHover over different coil blocks: the higher the §elevel§r, the more items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of level 4 coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r and at least §a1 energy hatch§r of any tier.\n\n", + "desc:8": "The §3Multi Smelter§r is an absolute smelting unit, and is most likely the best furnace added by a mod.\n\nIt\u0027s a 3x3x3 multiblock machine capable of §esmelting huge amounts of items per second§r. By upgrading its coils and power tier, it can become capable of smelting up to literal thousands of items per second.\n\nHover over different coil blocks: the higher the §elevel§r, the more items a Multi Smelter can smelt per operation: §e32 items per level§r. The most basic Multi Smelter essentially does 32 items in the same time as a furnace does one. With a set of level 4 coil blocks, that jumps to 128 items per operation.\n\nThis quest doesn\u0027t ask for coils, hatches or buses: feel free to choose whatever combination you want. You\u0027ll need §a8 coil blocks§r, §a1 input bus§r, §a1 output bus§r and at least §a1 energy hatch§r of any tier.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22440,7 +22494,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.", + "desc:8": "§3Large Plasma Turbines§r are a powerful late game method of generating power. One Large Plasma Turbine produces §2a base of 16384 EU/t when using an IV Rotor Holder§r.\n\nGenerally, the best plasma fuels to use will be §eHelium Plasma§r with a §3Fusion Reactor Mk1§r, §eTin Plasma§r when you upgrade to §3Mk2§r, and §eAmericium Plasma§r when you upgrade to §3Mk3§r. However, the other plasmas are still competitive, and your setup might lend itself better to a different plasma.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22613,7 +22667,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine.\n\nThis quest accepts a §aScrewdriver§r and a §aCrowbar§r made of any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §a§lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §a§lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §a§lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §a§lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §a§lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §2§lDetector§r: Available in Item, Fluid, Energy, Activity, and Advanced Activity flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §2§lDigital Interface§r: A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.\n", + "desc:8": "§bGregTech§r adds a very versatile way of augmenting machines with §aMachine Covers§r. Covers are \"upgrades\" that you can put on any GregTech machine, chest, or drum to expand its functionality. These are seperate on each side of the machine, meaning you can have up to six different covers! To work with covers, you\u0027ll need to make yourself a §aScrewdriver§r to configure covers, and a §aCrowbar§r to remove covers without having to break the machine. This quest accepts a §aScrewdriver§r and §aCrowbar§r made from any material.\n\nHere\u0027s a list of some covers there are in the game, and what they do:\n\n- §lConveyor§r: transfers items continuously to or from an adjacent inventory.\n\n- §lPump§r: is much like a §aConveyor§r, but for fluids.\n\n- §lRobotic Arm§r: is much like §aConveyor§r, but has two additional modes:\n * §eKeep Exact§r: moves items to keep a stock of at most the specified number of items\n * §eSupply Exact§r: transfers precisely the specified number of items per operation.\nThis cover is very useful for crafting automation.\n\n- §lFluid Regulator§r: is like a §aRobotic Arm§r, but works with fluids instead of items.\n\n- §lShutter§r: prevents automation from interacting with a specific side of a machine.\n\n- §lDetector§r: Available in §aItem§r, §aFluid§r, §aEnergy§r, and §aActivity§r flavours. Emits a Redstone signal depending on the status of whatever it\u0027s detecting.\n\n- §lAdvanced Detectors§r: Available as §aItem§r, §aFluid§r, §aEnergy§r, or §aActivity§r, these covers can emit redstone in more ways than their normal counterparts. Specifically, the §aItem§r, §aFluid§r, and §aEnergy§r advanced detectors can emit a latched redstone signal based on the amount of item/fluid between a set min and max, or they can emit redstone signals proportional to the amount of item/fluids between a set min and max. The §aAdvanced Activity Detector§r emits redstone proportional to a machines progress on a recipe \n\n- §lDigital Interface§r: A graphical display for the machine\u0027s current status. Can display things like contained fluids, energy levels, etc.\n\nCovers that move items or fluids can have a §aFilter§r placed inside them. These modify the functionality of covers in ways explained in their own quests.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -22852,7 +22906,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §nvastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r on top of each Unpackager. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.\n\n", + "desc:8": "Now that you have §6Osmium§r and §6Iridium§r from the §6Tier Four Micro Miner§r, you can begin automating §bExtended Crafting§r recipes. While it is possible to use §6Automation Interfaces§r for this task, you have access to something §nvastly§r better§r: §bPackagedExCrafting§r.\n\nTo begin, you\u0027ll need to craft one of each extended §3Package Crafter§r listed on the right. Put an §3Unpackager§r on top of each one, and then a §3Packager§r on top of each Unpackager. These are all AE2 devices, so you\u0027ll need to connect them to an ME Network.\n\nNext, right-click the §3Package Recipe Encoder§r, and you should see a button saying \"Processing\": this button cycles through recipe types, including the various Extended Crafting tables. You\u0027ll have to choose the appropriate table for the recipe you want to encode.\n\n§6Holders§r must be encoded in pairs: one for the Packager, and one for the Unpackager. Select the appropriate table for the recipe, look up the recipe you want to encode, and press §6[+]§r in §bJEI§r to fill it in. Put two Holders in the top-left slot and press Save to encode the recipe to both of them. Finally, put each Holder into the respective machines.\n\nIf you\u0027ve done everything correctly, you should see the item appear as craftable in a Terminal.\n\nWhile it might seem that the crafting process is slow, §ePackagedAuto is excellent at parallelizing§r. You can surround an Unpackager with Crafters and it will use all of them. It\u0027s also possible to add more Unpackagers with Crafters to keep up with the Packager, as long as the Holders are all the same.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23023,15 +23077,15 @@ "408:10": { "preRequisiteTypes:7": [ 0, + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ 104, + 132, 148, - 386, - 132 + 386 ], "properties:10": { "betterquesting:10": { @@ -23108,7 +23162,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Unlike §aRF power§r, which is safe to transport in any §6conduit§r, §aEU power §r§erequires caution§r. The key is to always §amatch or exceed§r the §eVoltage §rand §eAmperage§r of your power source with your §6cables§r and machines.\n\n§o§4§cNEVER §rhook up your Energy Converter§r to a cable that has fewer §eAmps§r than your Energy Converter or Battery Buffer§r generates. For example, you must use §64x cable§r for a 4A Converter§r, and §616x cable§r for a filled 16-slot Battery Buffer§r. Cables with insufficient amperage rating will §cburn and be destroyed§r. §2Both the multiple-amp-source and multiple-face-input bugs from CE have been fixed - the Energy network now works as intended.§r\n\nSimilarly, your cable must match or exceed the §eVoltage§r of your machines, or they will §cburn and be destroyed§r.\n\n§cNEVER§r connect a machine to excessive §eVoltage§r or it will §cvaporize§r. Touching a §6wire§r with connected §aEU power§r will §cinjure or kill you§r, so for your safety, §euse §6cables§e instead§r!\n\n§2Superconductor-type wires do not damage you in CEu. The 0-loss cables in CE (Conductive Iron, Energetic Alloy, etc.) are considered Superconductors.", + "desc:8": "Unlike §aRF power§r, which is safe to transport in any §6conduit§r, §aEU power §erequires caution§r. The key is to always §amatch or exceed§r the §eVoltage §rand §eAmperage§r of your power source with your §6cables§r and machines.\n\n§cNEVER §rhook up your Energy Converter§r to a cable that has fewer §eAmps§r than your Energy Converter or Battery Buffer§r generates. For example, you must use §64x cable§r for a 4A Converter§r, and §616x cable§r for a filled 16-slot Battery Buffer§r. Cables with insufficient amperage rating will §cburn and be destroyed§r. §2Both the multiple-amp-source and multiple-face-input bugs from CE have been fixed - the Energy network now works as intended.§r\n\nSimilarly, your cable must match or exceed the §eVoltage§r of your machines, or they will §cburn and be destroyed§r.\n\n§cNEVER§r connect a machine to excessive §eVoltage§r or it will §cvaporize§r. Touching a §6wire§r with connected §aEU power§r will §cinjure or kill you§r, so for your safety, §euse §6cables§e instead§r!\n\n§2Superconductor-type wires do not damage you in CEu. The 0-loss cables in CE (Conductive Iron, Energetic Alloy, etc.) are considered Superconductors.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -23279,7 +23333,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!\n", + "desc:8": "The §3Lunar Mining Station§r is a large multiblock structure used for mining gases from the moon. It is an excellent (though not the only) source of §9Deuterium§r or §9Helium-3§r, depending on what kind of §6Rover§r you use. \n\nRovers only have a 10% chance to break while mining, so a stack of them will last quite a while.\n\nWhile both available recipes require §eMV power§r, you can overclock it with higher tiers of power. The positions of hatches and buses can be swapped with any §6LuV Machine Casing§r.\n\n§6Sneak-right click§r the controller to enable the in-world preview.\n\nBecause this structure must be placed on the Moon, it is a good idea to use mechanisms like §aEnder Tanks§r or a §6Quantum Link Chamber§r for teleporting the fluids back to your base.\n\nMake sure to keep it chunk-loaded!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26379,7 +26433,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", + "desc:8": "§2Most plates are made in the Bending Machine instead of here. (Technically this was the case in CE, but this modpack transferred its recipes to the Compressor.)§r\n\nHowever, this machine will still see use for compressing §eNuggets§r into§e Ingots§r, §eIngots§r into §eBlocks§r, §eGem Dusts§r into §ePlates§r (such as §6Certus Quartz§r), as well as various other useful recipes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26433,7 +26487,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "An §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but right now you want it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.", + "desc:8": "§oThis quest accepts any Autoclave from LV to IV.§r\n\nAn §3Autoclave§r is a machine that uses liquids (usually water) to polish stones, carve gems into lenses, infuse gems with special liquids, and crystallize various dusts.\n\nYou\u0027ll need an Autoclave for many recipes, but most presently you will need it to make §6Pulsating Crystals§r and §6Vibrant Crystals§r from §bEnderIO§r.\n\n§6Pulsating Crystals§r will be required immediately to make §aSnad§r, the key to infinite fuel.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -26472,7 +26526,7 @@ "0:10": { "Count:3": 1, "Damage:2": 125, - "OreDict:8": "", + "OreDict:8": "questbookAutoclave", "id:8": "gregtech:machine" } }, @@ -26668,8 +26722,8 @@ }, "494:10": { "preRequisites:11": [ - 102, - 62 + 62, + 102 ], "properties:10": { "betterquesting:10": { @@ -26917,7 +26971,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When making circuits, you\u0027ll need either molten §9Tin§r, or molten §9Soldering Alloy§r§r§r. §2Soldering Alloy is made in the Mixer with 6 parts Tin Dust, 3 parts Lead Dust and 1 part Antimony Dust.§r You then process it in an §3Extractor §rfor the usual 144mB of fluid per unit.\n\nThe §2Circuit Assembler§r will only consume half as much Soldering Alloy as it would have consumed molten Tin per craft (72mB vs 144mB), so it\u0027s very efficient to use this stuff.\n\n§2Antimony can be directly smelted from Stibnite Ore, allowing you to skip ore processing for this.", + "desc:8": "When making circuits, you\u0027ll need either molten §9Tin§r, or molten §9Soldering Alloy§r. §2Soldering Alloy is made in the Mixer with 6 parts Tin Dust, 3 parts Lead Dust and 1 part Antimony Dust.§r You then process it in an §3Extractor §rfor the usual 144mB of fluid per unit.\n\nThe §2Circuit Assembler§r will only consume half as much Soldering Alloy as it would have consumed molten Tin per craft (72mB vs 144mB), so it\u0027s very efficient to use this stuff.\n\n§2Antimony can be directly smelted from Stibnite Ore, allowing you to skip ore processing for this.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27218,7 +27272,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27272,7 +27326,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Brewery.\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics.", + "desc:8": "§oThis quest accepts any Brewery from LV to IV.§r\n\nYou can turn §6Plant Balls§r and other various §6sugary crops§r into §9Biomass§r with a §3Brewery§r. Biomass is the first step towards making Plastic in the form of §9Polyethylene§r.\n\nThe Brewery is a very very slow machine, but it requires almost no power. Building §2many Breweries§r is necessary to brew enough Biomass for plastics. §2An alternative and more resource efficient way of making biomass is with a Pyrolyse Oven, Water, and Bio Chaff.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27473,7 +27527,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -27654,10 +27708,10 @@ }, "511:10": { "preRequisites:11": [ - 296, - 272, + 18, 26, - 18 + 272, + 296 ], "properties:10": { "betterquesting:10": { @@ -27772,7 +27826,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28367,7 +28421,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Assembling Machine§r.\n\nRequires a bunch of standard circuit components.", + "desc:8": "The first and most expensive Tier Six Circuit, needed for crafting the §3IV Circuit Assembler§r.\n\nRequires a bunch of standard circuit components.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28526,14 +28580,14 @@ }, "527:10": { "preRequisiteTypes:7": [ - 0, 2, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, + 235, 275, - 235 + 311 ], "properties:10": { "betterquesting:10": { @@ -28592,7 +28646,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.\n", + "desc:8": "What?!\n§6STEAM DYNAMO§r is evolving!\n\nUpgrade kits can be applied to Thermal Expansion Dynamos, machines, and even Portable Tanks. Machines and dynamos get additional augment slots.\n\nWhen applied to a dynamo, it increases the §apower generation and fuel burn rate to 150%§r.\n\nIncreases the base capacity of Portable Tanks to §a200 buckets§r.\n\nAllows machines operate at §a150% of base power per tick§r. The more power a machine can use, the faster it works.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28762,7 +28816,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Assembling Machine§r.", + "desc:8": "Now you can craft the §6Quantum Processor Mainframe§r, the first Tier Seven circuit.\n\nThese are required for crafting the Ludicrous Voltage (LuV) §3Circuit Assembler§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -28865,14 +28919,14 @@ }, "533:10": { "preRequisiteTypes:7": [ + 2, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 535, - 536, - 325 + 536 ], "properties:10": { "betterquesting:10": { @@ -28988,7 +29042,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Assembling Machine§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.\n", + "desc:8": "The §6Crystal Processor Mainframe§r is the first Tier Eight circuit.\n\nThis is the first tier of Circuit which must be §2researched§r in the §3Research Station§r.\n\nAlong with things you already know how to make, this needs §6HSS-E Frames§r.\n\nThese are required for crafting the §3ZPM Circuit Assembler§r. As usual, these are extremely expensive: invest in the next theme of circuits instead of trying to mass-produce these.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29042,7 +29096,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dStabilized Miners§r. Multiblock hatches are a different matter: feel free to upgrade your Multiblocks to Ultimate Voltage, or even higher, if you can handle the power drain.\n", + "desc:8": "§6ZPM Machine Hulls§r are made with §2Naquadah Alloy Plates,§r but you\u0027ll notice they also need §2Polybenzimidazole§r.\n\nZPM stands for Zero Point Module.\n\nThis is the last tier of machine that\u0027s sensible to produce before you reach the §dStabilized Miners§r. Multiblock hatches are a different matter: feel free to upgrade your Multiblocks to Ultimate Voltage, or even higher, if you can handle the power drain.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29238,9 +29292,9 @@ "540:10": { "preRequisites:11": [ 21, + 76, 147, - 259, - 76 + 259 ], "properties:10": { "betterquesting:10": { @@ -29349,8 +29403,8 @@ "542:10": { "preRequisites:11": [ 197, - 296, - 209 + 209, + 296 ], "properties:10": { "betterquesting:10": { @@ -29410,7 +29464,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29610,7 +29664,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Note: this quest accepts both LV and MV Distillery. §2If you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r.§r \n\nHowever, the Distillation Tower is mandatory for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nCan\u0027t avoid it forever!\n\n", + "desc:8": "Note: this quest accepts both LV and MV Distillery. §2If you are distilling Ethanol, you now need an MV Distillery.\n\n§rThe §3Distillery§r is a single-block machine which only outputs one distillate out of several and §cdiscards§r the rest. You can use this now to get §9Ethanol§r from §9Biomass§r, or to selectively distill §9Oil§r in multiple steps to §9Ethylene§r. Its advantage over the full Tower, apart from cost, is its §denergy efficiency§r.§r \n\nHowever, the Distillation Tower is mandatory for advanced chemistry, as most things have more than one important output: §9Fermented Biomass§r, §9Charcoal Byproducts§r from your §3Pyrolyse Oven§r, and the entire line of petrochemicals from §9Oil§r, to name a few.\n\nCan\u0027t avoid it forever!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29775,7 +29829,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", + "desc:8": "§2Fluid Rigs will harvest fluids from underground fluid veins. Note that the fluid veins are simply simulated and don\u0027t exist in the world. §r\n\nShift-right-click while holding the §3Prospector\u0027s Scanner§r to set it to fluid mode, then right click it in order to see the type and amount of fluid underground and to check the depletion state of the vein. The first number represents the base amount of fluid extracted per second. You can also check the §eFluid Vein Information JEI§r page for information on where they spawn.\n\nIn the §eOverworld§r, it can harvest: §9Oil, Light Oil, Heavy Oil, Raw Oil, Natural Gas\nSalt Water§r (only in Ocean biomes)\n\nIn the §eNether§r: §eLava, Natural Gas§r\n\nOn the §eMoon§r: §9Deuterium, Helium-3§r\n\nIn the §eVoid§r: §9Raw Oil§r (does not deplete)\n\nAs Fluid Rigs work, they will deplete the vein under them, reducing their yields. When a vein is depleted, it still yields a small amount of its fluid. The first tier of Fluid Rig takes §d100,000 operations§r to deplete a vein. Higher tier Fluid Rigs harvest fluids far faster and deplete veins slower.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -29835,6 +29889,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "extrautils2:angelblock" + } + }, + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -30198,7 +30270,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§cThe 4.5th Micro Miner.§r\n\nAll of the Tier Four missions require §68 Quantum Flux§r and a stack of §6Aerotheum Dust§r.\n\nThis miner will be your primary source of mob drops, for all, if not most, of your game.\n\nWhen equipped with a §6Sapling§r:\n§6* Creeper, Skeleton and Zombie skulls\n* Bone\n* Rotten Flesh\n* Gunpowder\n* Slime Block\n* Guardian Scale§r\n\nWhen equipped with a §6Block of Netherrack:\n* Wither Skeleton Skull and Bones\n* Blaze Rod\n* Blizz, Blitz and Basalz Rods\n* Ghast Tear\n* Magma Cream\n* Drop of Evil§r\n\nWhen equipped with a §6Block of Endstone:\n* Enderman Skull\n* Enderpearl Block\n* Shulker Shell\n* Shulker Pearl§r\n\nWhen equipped with §6Ender Eyes:\n* Dragon Lair Data\n* Ender Dragon Head§r\n\nWhen equipped with §6Wither Bones§r:\n§6* Wither Realm Data\n* Nether Star Block\n", + "desc:8": "§cThe 4.5th Micro Miner.§r\n\nAll of the Tier Four missions require §68 Quantum Flux§r and a stack of §6Aerotheum Dust§r.\n\nThis miner will be your primary source of mob drops, for all, if not most, of your game.\n\nWhen equipped with a §6Sapling§r:\n§6* Creeper, Skeleton and Zombie skulls\n* Bone\n* Rotten Flesh\n* Gunpowder\n* Slime Block\n* Guardian Scale§r\n\nWhen equipped with a §6Block of Netherrack:\n* Wither Skeleton Skull and Bones\n* Blaze Rod\n* Blizz, Blitz and Basalz Rods\n* Ghast Tear\n* Magma Cream\n* Drop of Evil§r\n\nWhen equipped with a §6Block of Endstone:\n* Enderman Skull\n* Enderpearl Block\n* Shulker Shell\n* Shulker Pearl§r\n\nWhen equipped with §6Ender Eyes:\n* Dragon Lair Data\n* Ender Dragon Head§r\n\nWhen equipped with §6Wither Bones§r:\n§6* Wither Realm Data\n* Nether Star Block", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31174,7 +31246,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils do not give speed bonuses, they just increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nTo compensate, you\u0027ll need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.\n\n", + "desc:8": "As you continue to progress, crafting times for more advanced §3Electric Blast Furnace§r recipes will continue to increase. More advanced coils do not give speed bonuses, they just increase the operating temperature so you can smelt more advanced materials, §2and they also grant energy efficiency bonuses and speed bonuses to overclocking.§r\n\nTo compensate, you\u0027ll need to get your infrastructure for smelting, as well as for power generation, up to snuff.\n\nYou don\u0027t need to get all eight of these completed and running just yet, but plan to at some point in the future. Instead of upgrading existing EBFs, have them passively automating a stock of materials and build new EBFs with higher specifications for new materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31266,7 +31338,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31320,7 +31392,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31374,7 +31446,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31428,7 +31500,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31483,7 +31555,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31537,7 +31609,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31592,7 +31664,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31646,7 +31718,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31738,7 +31810,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31792,7 +31864,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31846,7 +31918,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31900,7 +31972,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -31954,7 +32026,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32008,7 +32080,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32062,7 +32134,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32116,7 +32188,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32170,7 +32242,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32225,7 +32297,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32279,7 +32351,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32333,7 +32405,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -32387,7 +32459,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32606,7 +32678,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r. \n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.\n", + "desc:8": "§6Neutronium§r is a hyper-dense material normally found in the hearts of neutron stars: the collapsed cores of stars between ten and thirty times the size of the sun.\n\nFun fact: a single neutronium block is approximately 2884 million metric tons and somewhere around 600000K, yet you\u0027re somehow capable of holding one with your bare hands. Don\u0027t think about it too much.\n\nNeutronium is made from fusing molten §9Naquadria§r, a super-enriched form of §6Naquadah§r, with molten §9Americium§r. \n\nAfter getting §6Chaotic Fusion Injectors§r, you might consider using Tier Nine Micro Miners to supplement the fusion, as it is net-positive for Neutronium. These miners are expensive though, so it\u0027s up to you.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32930,7 +33002,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -32984,7 +33056,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33038,7 +33110,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33092,7 +33164,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33146,7 +33218,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33200,7 +33272,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33255,7 +33327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33310,7 +33382,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33364,7 +33436,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33418,7 +33490,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33472,7 +33544,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33526,7 +33598,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33580,7 +33652,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33634,7 +33706,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33688,7 +33760,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33742,7 +33814,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33796,7 +33868,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33850,7 +33922,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33904,7 +33976,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -33958,7 +34030,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34012,7 +34084,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34066,7 +34138,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34120,7 +34192,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34174,7 +34246,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34228,7 +34300,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34282,7 +34354,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34336,7 +34408,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34390,7 +34462,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34444,7 +34516,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34498,7 +34570,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34552,7 +34624,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34606,7 +34678,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34660,7 +34732,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34714,7 +34786,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34768,7 +34840,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34822,7 +34894,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34876,7 +34948,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 64, @@ -34930,7 +35002,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -34985,7 +35057,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35039,7 +35111,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35093,7 +35165,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35147,7 +35219,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35201,7 +35273,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35255,7 +35327,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35309,7 +35381,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35363,7 +35435,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35417,7 +35489,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35471,7 +35543,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35525,7 +35597,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35579,7 +35651,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35633,7 +35705,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35687,7 +35759,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35741,7 +35813,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35795,7 +35867,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35849,7 +35921,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35904,7 +35976,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": " ", + "desc:8": "Required in §dOmnium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -35958,7 +36030,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6§6Plutonium 239§r, and §6Plutonium 241§r.", + "desc:8": "When you have enough materials, you can craft Uranium isotope clumps into Low-Enriched Uranium 235 Fuel (or §6LEU-235§r, for short). This fuel uses an 8:1 ratio of U238 to U235.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted LEU-235 Fuel§r.\n\nThe depleted fuel is separated in a regular §3Centrifuge§r, resulting in many tiny clumps of fissile materials: Uranium 238, §6Neptunium 237§r, §6Plutonium 239§r, and §6Plutonium 241§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36083,7 +36155,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6§6Neptunium 236§r, and §6Neptunium 237§r.", + "desc:8": "Thorium is a basic fissile material that can be used to get into the fissile chain. Thorium comes from §6Pitchblende Ore§r, §6Thorium Ore§r, and even §2Black Granite§r (with a few processing steps).\n\nThorium-Bred Uranium, or §6TBU§r for short, is made from nine clumps of §6Thorium 232§r enriched in a §3Thermal Centrifuge§r.\n\nThis fuel is processed in your §3Fission Reactor§r by placing it in the controller. When a redstone signal is applied it will burn the fuel, generating some power from the reactor and after a while you\u0027ll get a §6Depleted TBU Fuel§r.\n\nThe depleted fuel provides tiny clumps of §6Uranium 233§r, §6Uranium 235§r, §6Neptunium 236§r, and §6Neptunium 237§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36143,7 +36215,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\n", + "desc:8": "Climbing the ladder of fissile materials will require some specific raw materials and machinery.\n\n§2Uraninite is the base resource you will need, which comes from Uraninite and Pitchblende Ore. You will need to react it with Fluorine and Hydrofluoric Acid in a Chemical Reactor to form Uranium Hexafluoride.\n\nThe Uranium Hexafluoride must then be separated into Depleted and Enriched Uranium Hexafluoride in a Centrifuge. The Depleted UF₆ will grant Uranium-238, while the Enriched UF₆ will grant Uranium-235.\n\nYou may find Red Granite as a viable source of Uranium-238 if you are able to process it in large enough volumes to offset the low base chance.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36203,7 +36275,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.\n", + "desc:8": "§oNote: this quest accepts Neptunium 236 or 237.§r\n\nLow-Enriched Neptunium 236, or §6LEN-236§r, is the next step in the fissile material fuel chain.\n\nThis fuel requires an 8:1 ratio of §6Neptunium 237§r to §6Neptunium 236§r. Using only the results from Thorium fission, it will take two batches of §6Depleted TBU Fuel§r to make your first LEN fuel.\n\nOf course, higher order reactions also will result in small amounts of Neptunium that you can work with as well.\n\n§6Depleted LEN 236§r gives a small bit of Neptunium 237 back, but principally provides §6Plutonium§r and §6Americium§r isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36314,8 +36386,8 @@ "675:10": { "preRequisites:11": [ 669, - 674, - 673 + 673, + 674 ], "properties:10": { "betterquesting:10": { @@ -36434,7 +36506,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", + "desc:8": "§oNote: this quest accepts Americium 241, 242, or 243.\n\n§6Americium 242§r and §6Americium 243§r are used to make §6LEA-242 Fuel§r.\n\nThere\u0027s also §6Americium 241§r, but this is only useful for making RTGs (which produce small amounts of RF continuously) or decaying down into §6Neptunium§r.\n\n§6Depleted LEA 242 Fuels§r will return a lot of §6Curium 246§r, and small amounts of the other three isotopes.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36692,7 +36764,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §2CEu§r§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDML§r for easy infinite resources\n- §6Omnicoins§r can\u0027t be spent\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", + "desc:8": "The §2CEu§r version of Nomi is already slightly harder than the original, due to various progression changes CEu makes.\n\nBut if you want a §charder§r, or perhaps a more \"§5true§r\" §dGregTech§r experience, check out the §cExpert§r mode. This pack mode is based on the §bSelf-Torture Edition fork§r of the original pack.\n\nHighlights include:\n\n- No §bDML§r for easy infinite resources\n- §6Omnicoins§r can\u0027t be spent\n- The §7Steam Age§r\n- No §3Creative Tank§r; instead...\n- §6Stabilized Micro Miners§r for late-game infinite resources\n- Harder recipes for assorted things like §6Iridium§r, §3Numismatic Dynamos§r, and more\n\nTo enable §cExpert§r mode, change the pack mode (Options -\u003e Pack Mode) to Expert, then run §e/bq_admin default load ExpertQuests§r. The same command should be used for updating the quest book on Expert mode.\nTo go back, change the pack mode to §aNormal§r and run §e/bq_admin default load§r.\n\nTo tune your challenge even further, check out the various recipe configs in the GregTech config file.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -36785,7 +36857,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.\n\nThis will not be needed now. In fact, its only use is for §6Solar Panels§r. The §6Carbon Mesh§r has some uses though.\n", + "desc:8": "§6String§r and §6Coal Dust§r can be baked together into a §6Carbon Mesh§r in an §3Alloy Furnace§r.\n\nCombine that with §6Pulsating Dust§r to get a §6Pulsating Mesh§r.\n\nThis will not be needed now. In fact, its only use is for §6Solar Panels§r. The §6Carbon Mesh§r has some uses though.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38786,13 +38858,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §b§b§6Ore Byproduct Page§6§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and a guaranteed 3 tiny piles of byproduct. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3§3Centrifuge§r: separates Pure or Impure dusts into the final material, producing a guaranteed §21 (nerfed from 3) tiny pile of byproduct§r.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 3 additional tiny piles of byproduct, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.\n", + "desc:8": "When you first started the pack, we told you that ore doubling can wait, and that\u0027s true... But you will need to start doing some rudimentary ore processing for §ebyproducts§r.\n\nByproducts are additional materials that can only be obtained from processing ores in certain machines. For example, there is no \"Gallium Ore\" or \"Arsenic Ore\". You get §6Gallium§r and §6Arsenic §ras a byproduct from processing other ores.\n\nOres have various means of processing, and eventually you\u0027ll use machine pipelines to process ores in specific ways to optimize what byproducts you gain. You can look at the §6Ore Byproduct Page§r of an ore in §bJEI§r, accessed by pressing \u0027U\u0027 on an ore and navigating to the byproduct tab, to see the required route to obtain desired byproducts. \n\nThe relevant machines are as follows:\n \n- §3Macerator§r: turns ores into §6Crushed Ores§r, Crushed Ores into §6Impure Dusts§r, and §6Purified Crushed Ores§r into §6Pure Dusts§r. Higher tiers of macerators have byproduct slots and gain a chance to get a full pile of byproduct from ores and both types of crushed ores.\n\n- §3Ore Washer§r: cleans Crushed Ores with §9Water§r, making Purified Crushed Ores§r, and 1/3 of a byproduct dust. Using §9Distilled Water§r makes them go faster. §2You can also perform a simple wash with this similar to Cauldron washing, which is extremely fast, but grants no byproducts.§r\n\n- §3Chemical Bath§r: §2uses Sodium Persulfate or Mercury to purify certain ores, granting a chance to yield a full pile of a byproduct.\n\n§r- §3Centrifuge§r: separates Pure or Impure dusts into the final material, producing 1/9 byproduct dust.\n\n- §3Electrolyzer§r: uses power to split compounds into individual elements, sometimes gaining useful byproducts in the process. §2Be warned that certain dusts may be better to directly smelt instead of electrolyze!§r\n\n- §3Thermal Centrifuge§r: not to be confused with the regular Centrifuge. §2Less slow and power-hungry now, but still so. However, it yields 1/3 byproduct dust, and macerating the Centrifuged Ore can grant a special third byproduct.\n\n§2- Sifter: filters high-quality Gems from Purified Crushed gem Ores for an overall higher yield.\n\n- Electromagnetic Separator: filters magnetic metals from certain ores, increasing their yields.§r\n\nYour first forays into ore processing for byproducts will be the Electrolyzer and the Centrifuge.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 4, + "Damage:2": 39, "OreDict:8": "", - "id:8": "gregtech:meta_dust_tiny" + "id:8": "gregtech:meta_dust" }, "ignoresview:1": 0, "ismain:1": 0, @@ -38826,7 +38898,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nEnder Pearls are best gotten through §3Ender Lilies§r. You need §6Pulsating Dust§r for many things.\n\n", + "desc:8": "§6Uraninite Ore§r is the first source of §6Pulsating Dust§r but is not a very good one in the long term. Instead you should make §6Resonant Clathrates§r, which are an infinitely-renewable and effective source of Pulsating Dust.\n\nResonant Clathrates are made by melting §6Ender Pearls§r with a §3Fluid Extractor§r into §9Resonant Ender§r, then mixing that with §6Nether Quartz§r in an MV or better §3Chemical Reactor§r. Smelting this clathrate gives Pulsating Dust.\n\nEnder Pearls are best gotten through §3Ender Lilies§r. You need §6Pulsating Dust§r for many things.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38935,7 +39007,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.\n\n", + "desc:8": "Working with fluids is a bit tricky. AE2 §aPatterns§r have no notion of fluids, meaning that you have to §ededicate separate machines to specific fluid combinations§r, ensuring they remain stocked.\n\nAE2 has a §aFluid Import Bus§r and §aFluid Export Bus§r, and this is the usual go-to for players experienced with AE2. A §aCapacity Card§r will let you export or import five specific chemicals through a single bus, which is enough for, say, §3Chemical Reactors§r. However, §cexcessive use of AE2 buses will cause lag§r.\n\nA better approach for §bGregTech§r machines is using a stocked §aFluid Interface§r and a §aPump§r or a §aFluid Regulator§r. This works almost identically to passive autocrafting with Robot Arms, and §aFluid Filters§r can allow routing specific fluids to adjacent machines. This method is much more performant, scaling without causing lag like buses. For machines from other mods, you can route fluids from a Fluid Interface with conduits.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -38975,7 +39047,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them.\n\n", + "desc:8": "Your §3Chemical Reactors§r will be making a lot of different fluids. You\u0027ll need to manage the logistics of routing and storing all the different fluids you\u0027re automating.\n\nWherever possible, having one Chemical Reactor output directly into another machine that needs its output chemical saves you from having to figure out additional storage and routing. §aFluid Filters§r and §aPump covers§r are very useful for moving fluids around a compact processing pipeline.\n\nBut what about the final output fluids that you need elsewhere?\n\nOne option is to use the output tanks of the Chemical Reactors as a small storage buffer, letting it back up and stop crafting automatically. A §aFluid Storage Bus§r on the machine will expose the fluid to your ME Network. Whenever you need some of this fluid, your AE2 system will pull the needed fluid out and the machine will resume processing.\n\nThere\u0027s some catches with this approach though. First is that the inaccessible input tanks will also show up in AE but you won\u0027t be able to access them. You will want to set the Storage Bus to §eExport Only§r so AE doesn\u0027t try to store random fluids in the Chemical Reactor, and you may want to §ereduce the priority§r of the Storage Bus as well: this will signal to AE that you want it to remove fluids from that location first. Also, if multiple fluids are produced, §ethe machine will not resume processing if it doesn\u0027t have room for all fluid outputs§r.\n\nWhen you get access to them, it\u0027s probably just better to use single-fluid-formatted §aFluid Storage Cells§r and dump outputs into AE via Fluid Interfaces. You can fill up the cells, then pull the fluids out wherever else you need them.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39569,12 +39641,12 @@ }, "745:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 311, - 235 + 235, + 311 ], "properties:10": { "betterquesting:10": { @@ -39716,7 +39788,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r.\n\n", + "desc:8": "Vanilla enchanting mechanics are just so tedious. Don\u0027t you wish you could just make a specific enchant instead of grinding levels and rolling the dice?\n\n§eOh wait- you can!§r\n\nThe §3Dark Steel Enchanter§r is a device that uses §6Book and Quill§r, experience levels, lapis, and enchant-specific items to create an §6Enchanted Book§r with an enchantment of your choosing. Then you can just use an Anvil to enchant your item like usual.\n\nThis is a good time to bring up the §dHolding§r enchant, which can be applied to most items from §bThermal Foundation§r and its related mods. Holding can be crafted up to level IV, which massively boosts the storage capacity of items like §aSatchels§r, §aFlux Capacitors§r, and §aPortable Tanks§r.\n\nYou can also make the §dMending§r enchant which allows you to infinitely repair the item when damaged using §9Liquid XP§r in an §bEnderIO §aFluid Tank§r or §aPressurized Fluid Tank§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39770,7 +39842,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A §3Compactor§r§r§r specialized to a §aGear Press§r is a very power efficient way to make gears. It is slower than its overclocking GTCE counterparts, but is required for some gears, most notably the crystal and gemstone ones.\n\nLike all §aAugments§r, the Gear Press specialization takes up an upgrade slot, but you can still use the rest of the slots for other ones like speed upgrades.", + "desc:8": "A §3Compactor§r specialized to a §aGear Press§r is a very power efficient way to make gears. It is slower than its overclocking GTCE counterparts, but is required for some gears, most notably the crystal and gemstone ones.\n\nLike all §aAugments§r, the Gear Press specialization takes up an upgrade slot, but you can still use the rest of the slots for other ones like speed upgrades.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39819,14 +39891,14 @@ }, "749:10": { "preRequisites:11": [ + 535, 802, - 846, - 535 + 846 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", + "desc:8": "Upgrade time! \n...or building a new one, which is probably better.\n\nYet again this quest asks for the minimal number of casings. Make an extra §229§r if you don\u0027t want more than §a2 Fluid Inputs§r and §a1 Fluid Output§r. Don\u0027t forget the extra §e31 Fusion Glass§r or §6Fusion Machine Casings§r!\n\n§bYes, the Fusion Glass is the same tier as last time, but the Fusion Machine Casings are more expensive.§r\n\nMake sure your using §6ZPM Energy Hatches§r!\n\nIf you insist on upgrading instead of making a new one, don\u0027t dismantle the current one before you\u0027re sure you\u0027ve got everything you need to upgrade it, or you might end up having to rebuild the §3Mark 1 Fusion Reactor§r again.\n\nThe §3Mark 2 Fusion Reactor§r has an energy buffer of §e320M EU§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -39898,13 +39970,13 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r.\n\n§6Enderium§r doesn\u0027t require much power (running on as little as MV) but it does need a lot of heat and is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.\n\n", + "desc:8": "A complex material from §bThermal Expansion§r cooked in an §3Electric Blast Furnace§r, or a §2Alloy Blast Smelter§r.\n\n§6Enderium§r is incredibly slow without overclocking. §2You can use small amounts of Krypton from Liquid Ender Air distillation to significantly decrease the smelting time.§r\n\nAs with all later blast furnace materials, dedicate a furnace to keeping these in stock and have it running constantly to ensure a stable supply (turning it off when you have an acceptably vast stockpile).\n\nIn addition to its other uses, Enderium gets you access to §aResonant Upgrade Kits§r for machines and the §6Resonant Satchel§r. These quests can be found on the §eProgression§r tab.", "globalshare:1": 0, "icon:10": { "Count:3": 1, - "Damage:2": 167, + "Damage:2": 18, "OreDict:8": "", - "id:8": "thermalfoundation:material" + "id:8": "nomilabs:meta_ingot" }, "ignoresview:1": 0, "ismain:1": 1, @@ -39952,7 +40024,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Aqueous Accumulators§r in §5Nomifactory§r are infinite water sources; they §l§ndo not§r require any water blocks nearby.\n\nThis machine can produce §9Water§r as fast as you can extract it (the only downside being that it makes some annoying noises).\n\nFriendship with §aEndervoirs§r ended.", + "desc:8": "§3Aqueous Accumulators§r in §5Nomifactory§r are infinite water sources; they §ndo not§r require any water blocks nearby.\n\nThis machine can produce §9Water§r as fast as you can extract it (the only downside being that it makes some annoying noises).\n\nFriendship with §aEndervoirs§r ended.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40375,7 +40447,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Taranium§r is an exotic material found in tiny quantities from... §6Stone Dust§r.\n\nProcess Stone Dust through a long chain (and enjoy the byproducts), and eventually, you\u0027ll reach the §6Taranium Dust§r. It\u0027s used in several powerful endgame tools, such as §6UV Field Generator§r and §3Advanced Ore Drilling Plant II§r. ", + "desc:8": "§6Taranium§r is an exotic material found in tiny quantities from... §6Stone Dust§r.\n\nProcess Stone Dust through a long chain (and enjoy the byproducts), and eventually, you\u0027ll reach the §6Taranium Dust§r. It\u0027s used in several powerful endgame tools, such as §6UV Field Generator§r and §3Advanced Ore Drilling Plant II§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40620,7 +40692,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.\n\n", + "desc:8": "Now that you\u0027ve dealt with the dragon, seek the bedrock structure floating mid-air around the edge of the main island.\n\nCarefully throw an §6Ender Pearl§r inside one (where there\u0027s a portal-looking texture) to teleport to a distant island.\n\nOnce there, gather some §6Chorus Flowers§r. You\u0027ll have to smash the flower itself to get it: simply breaking the stem of a plant will not drop the flower.\n\nAnd finally, obtain some §6Draconium Dust§r. Its ore spawns in small quantities, but should be everywhere.\n\nTo get back to the main island, throw an Ender Pearl into another bedrock portal structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -40838,7 +40910,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Circuits along this line are LV, and can all be substituted in recipes.\n\n§7§2Electronic Circuits§r are the worst in terms of cost and effort required to produce, but you have to start with something.\n\n§2§2Integrated Circuits§r are the middle layer between §2Electronic Circuits and Microprocessors.§r\n\nAnd finally, §2Microprocessors§r, which take the lowest effort.", + "desc:8": "Circuits along this line are LV, and can all be substituted in recipes.\n\n§2Electronic Circuits§r are the worst in terms of cost and effort required to produce, but you have to start with something.\n\n§2Integrated Circuits§r are the middle layer between §2Electronic Circuits and Microprocessors.§r\n\nAnd finally, §2Microprocessors§r, which take the lowest effort.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41068,7 +41140,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.\n", + "desc:8": "Circuits along this line are LuV, and can all be substituted in recipes.\n\nThe pattern stays the same: the rightmost circuit comes in larger quantities and is overall easier to produce.\n\nMake sure to set up the wetware board production as soon as possible! These take a very long time to make.\n\nIt\u0027s LuV, not LUV.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41249,7 +41321,7 @@ "0:10": { "Count:3": 1, "Damage:2": 440, - "OreDict:8": "", + "OreDict:8": "questbookLathe", "id:8": "gregtech:machine" } }, @@ -41307,7 +41379,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Awakened Cores§6§r are the third tier of §bDraconic Evolution§r core, and are common components of endgame recipes.\n\nThese cores are made with §6Awakened Draconium§r and also cost §e3 Billion RF§r to craft.", + "desc:8": "§6Awakened Cores§r are the third tier of §bDraconic Evolution§r core, and are common components of endgame recipes.\n\nThese cores are made with §6Awakened Draconium§r and also cost §e3 Billion RF§r to craft.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41361,7 +41433,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "A gear forged from §6Empowered Diamantine Crystal§6§r.\n\nMade from fluid solidification.", + "desc:8": "A gear forged from §6Empowered Diamantine Crystal§r.\n\nMade from fluid solidification.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41415,7 +41487,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy. \n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and information on how to setup the §6Pylons§r and §6Stabilizers§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, § the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nYou might want to postpone the Tier 8 until after you reach the §dStabilized Micro Miners§r, as it requires large amounts of §6Awakened Draconium§r.\n\n", + "desc:8": "Now that you have §6Wyvern Fusion Injectors§r, you can make the §eEnergy Storage Core§r from §bDraconic Evolution§r. It\u0027s a great way to store all the energy required to craft power-hungry late game items.\n\nThe §eEnergy Storage Core§r is a multiblock structure that can be upgraded to store increasingly immense amounts of RF energy. \n\nSee the §bDraconic Evolution§r manual for more information on the material requirements for each tier, and information on how to setup the §6Pylons§r and §6Stabilizers§r.\n\n§6Energy Pylons§r are required to input and output energy from the core. Each pylon allows movement in a single direction, so you need at least two.\n\nOnce you have the materials together for your desired tier, the structure can build itself: simply access the GUI of the §6Energy Core§r, set the tier, and click Assemble. Items will be automatically used from your inventory. Once the structure is built, you can access the core\u0027s GUI again through §6Energy Core Stabilizers§r to activate it.\n\nYou might want to postpone the Tier 8 until after you reach the §dStabilized Micro Miners§r, as it requires large amounts of §6Awakened Draconium§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41481,7 +41553,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Cobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Netherrack§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.\n", + "desc:8": "Cobblestone can be processed into many useful materials:\n\n§6Stone Dust§r is useful for small amounts of a whole host of useful materials.\n\n§6Gravel§r is useful for making conduits and §9Concrete§r.\n\n§6Sand§r is useful for §6Glass§r, which can be turned into §6Nether Quartz§r or §6Silicon Dioxide§r for §6Oxygen§r.\n\nFinally, §6Dust§r can be turned into §6Netherrack§r.\n\nSet up a §ecobbleworks§r soon, so you can stockpile all these useful materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41552,7 +41624,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §eNether§r contains quite a few useful resources:\n- Some initial pieces of §6Sulfur§r\n- §6Glowstone§r and §6Soul Sand§r\n- §6Fluorine§r, §6Certus Quartz§r, §6Molybdenum§r, §6Antimony§r, and §6Gold§r-bearing ores\n- §9§2Nether Air§r, which can be distilled for useful gases\n- §eLava§r and §eNatural Gas§r from §2Fluid Rigs\n\n§rNether ores also contain §ddouble§r the resources per ore block compared to Overworld ores.", + "desc:8": "The §eNether§r contains quite a few useful resources:\n- Some initial pieces of §6Sulfur§r\n- §6Glowstone§r and §6Soul Sand§r\n- §6Fluorine§r, §6Certus Quartz§r, §6Molybdenum§r, §6Antimony§r, and §6Gold§r-bearing ores\n- §2Nether Air§r, which can be distilled for useful gases\n- §eLava§r and §eNatural Gas§r from §2Fluid Rigs\n\n§rNether ores also contain §ddouble§r the resources per ore block compared to Overworld ores.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41609,14 +41681,14 @@ "preRequisiteTypes:7": [ 0, 0, - 2, - 0 + 0, + 2 ], "preRequisites:11": [ 196, + 286, 531, - 828, - 286 + 828 ], "properties:10": { "betterquesting:10": { @@ -41708,7 +41780,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aRotor§r to go into each §3Rotor Holder§r§r. The Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Rotor also has a Durability, which is the number of seconds it will last.\n\n§aExample: §r§6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", + "desc:8": "§2Large Turbines have been improved in CEu. They are quite complex to run, but can generate lots of power when done well and scale very well.§r\n\nRight now, you can make the §6Large Steam Turbine§r and §6Large Gas Turbine§r. Once you get a §3Fusion Reactor§r going, you can make the §6Large Plasma Turbine§r.\n\nEach Large Turbine will need a §3Rotor Holder§r of the same or higher tier than the Large Turbine itself, and a §3Dynamo Hatch§r capable of handling the energy output. Each §3Rotor Holder§r tier above the Large Turbine §ddoubles§r the energy production and adds 10% to fuel efficiency.\n\nYou will need a §aRotor§r to go into each §3Rotor Holder§r. The Rotor will grant multiplicative Power and Efficiency bonuses depending on its material. Each Rotor also has a Durability, which is the number of seconds it will last.\n\n§aExample: §6Large Gas Turbine§r, with §3HSS-E Rotor§r and §3IV Rotor Holder§r:\n§aProduction:§r 4096 * 2.80 * 2 \u003d 22938 EU/t (91752 RF/t)\n§aEfficiency:§r 1.40 * 1.10 \u003d 154.0%\n§aDurability:§r 205,600 s (57.1 h)\n\nYou can run the §6Large Gas Turbine§r off §9LPG§r and §9Methane§r from §3Fluid Rigs§r, or §9Nitrobenzene§r from §6Wood§r.\nThe best §6Large Steam Turbine§r fuel is a closely-guarded government secret.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41747,7 +41819,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "These are the basic cables used by §3Applied Energistics§r to transport network connectivity. Due to the fact that channels are disabled, these cables will be your main method of transporting network connectivity, rather than the dense cables.\n\nThese cables do not share blockspace with conduits or cables for other mods, so they can be somewhat unweildy to build with, but they do accept §3Applied Energistics§r§6§r §6Facades§r, so they can be hidden very easily.\n\nLater you can make a variant of the cable that can share blockspace with §3Ender IO§r conduits.", + "desc:8": "These are the basic cables used by §3Applied Energistics§r to transport network connectivity. Due to the fact that channels are disabled, these cables will be your main method of transporting network connectivity, rather than the dense cables.\n\nThese cables do not share blockspace with conduits or cables for other mods, so they can be somewhat unweildy to build with, but they do accept §3Applied Energistics§r §6Facades§r, so they can be hidden very easily.\n\nLater you can make a variant of the cable that can share blockspace with §3Ender IO§r conduits.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41800,7 +41872,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§9§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.\n\n", + "desc:8": "§9Rubber§r has been sufficient for making cables so far, but you will soon discover that this basic type of rubber won\u0027t withstand more than §2Extreme Voltage§r. Higher quality rubber is necessary to properly insulate your wires.\n\nThere are two better types of rubber, and you will eventually need to make both of them. §eThese can also be used for insulating lower voltage wires more efficiently, requiring less fluid§r!\n\n§2Both Styrene-Butadiene Rubber (SBR) and Silicone Rubber (SiR) can wrap any Cable tier.§r However, SBR requires petrochemistry infrastructure you may not have yet, and is not mandatory until you are making late-game components. On the other hand, SiR can conveniently be made from chemicals you are already familiar with. By setting this up now, you won\u0027t have to change your wire coating material later!\n\nTo make Silicone Rubber, you will need to create §6Polydimethylsiloxane Dust§r in one of several ways, then mix it with §6Sulfur§r in a §3Chemical Reactor§r. You can then coat wires with it in an §3Assembling Machine§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41897,7 +41969,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.\n\n", + "desc:8": "The §3Farming Station§r is a machine that automates growing and harvesting trees and crops around it, based on what items you put in it.\n\nThe Farming Station will principally collect crops, saplings, and wood, but it will also collect things like §6Apples§r from Oak Trees and §6Sticky Resin§r from Rubber Trees. It can also collect leaves if you want it to.\n\nLike other §bEnderIO§r machines, it requires an §6RF capacitor§r. The quality of capacitor affects the overall size of the farm as well as the speed and energy at which it operates.\n\nYou can configure which crops or tree types will be planted relative to the Farming Station by placing the crop or sapling in the various quadrants in the GUI. Clicking the lock button will ensure that the stack placed there won\u0027t be completely consumed, as that could lead to plants migrating to other quadrants.\n\nIn addition to power, the Farming Station§r requires specific §etools§r (and usually a supply of §9Water§r) to operate. If you\u0027re missing anything, the machine will refuse to operate and displays a message over itself to let you know.\n\nFor planting §6crops§r or §6saplings§r, you need a §aHoe§r.\nFor chopping §6trees§r, you need an §aAxe§r. To collect §6leaves§r, you also need §aShears§r.\n\nTool durability is consumed as the farm performs work, so the tools will eventually break. You can make §aStone Tools§r from a cobblestone generator and some sticks.\n\nAlternately, you can invest in fancier tools such as th§re §aDark Backhoe§r (which is designed for use in the Farming Station), or even unbreakable tools much later like the §aFlux Infused Axe§r and §aOmniwrench§r (shears).\n\nThe Farming Station also has a lesser-known feature: it respects enchantments and upgrades on your tools. Tools with §eEmpowered§r upgrades will be ejected into the output slots when they run out of charge (if they don\u0027t break first). Tools with the §eMending§r enchantment are similarly ejected when they are about to break.\n\nYou can use these properties to your advantage.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -41950,7 +42022,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.\n", + "desc:8": "The §6Smart Item Filter§r from §3GregTech§r is an important tool when automating otherwise troublesome machines. It is a cover which filters item transfer based on whether a valid recipe exists for those items in a specified machine.\n\nThis is powerful in combination with movement covers like the §6Robot Arm§r. If you place this filter on the §eElectrolyzer§r mode in a Robot Arm set to §eSupply Exact§r mode, the Robot Arm will transfer precisely the right amounts of all valid items into an §3Electrolyzer§r so it will operate without clogging. There\u0027s no other way to accomplish this feat!\n\nThis filter also has §eSifter§r and §eCentrifuge§r modes for use with those machines. It does not have modes for any other machines.\n\nThe §eDefault§r button lets you click it to §eIgnore Fluids§r, which is useful when you have recipes that also require fluids (like §9Hydrogen§r in an Electrolyzer). Since Robot Arms can\u0027t move fluids, it would otherwise prevent the cover from working.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42003,7 +42075,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", + "desc:8": "§aFilters§r are a type of machine cover that controls what items or fluids are allowed to pass through it. They can be used directly on the side of a machine to affect external automation or the Machine\u0027s §aAuto-Output Functionality§r.\n\nYou can also §eplace filters inside of other covers§r to control what items or fluids that cover will interact with. When used in a §6Robot Arm§r, §aItem Filters§r make for a powerful automation tool for §ekeeping specific items in stock§r in specific quantities in Machines. With §6Fluid Regulators§r, similar behavior is possible with fluids using a §aFluid Filter§r. For §6Conveyors§r and §6Pumps§r, it simply limits what that cover will move.\n\n§aFilters§r all have 9 configurable slots and whitelist/blacklist modes, and can be applied to multiple sides of machines. When placed inside a §6Robot Arm§r in §eKeep Exact§r or §eSupply Exact§r mode§r, the item count in a filter can be incremented by §eRight Clicking§r and decremented by §eLeft Clicking§r. Holding §eShift§r causes the count to increase/decrease by a factor of 2. This controls the number of each type of item that will be kept in stock or moved at a time.\n\nSimilar controls are available for the §aFluid Filter§r when placed inside a §6Fluid Regulator§r.\n\nAdditionally, the §aOre Dictionary Filter§r is a powerful tool that has a specialized filter which uses ore dictionary entries and §2uses regular expressions (regex)§r, e. g. \"§6ingotHot*§r\" will match all hot ingots, \"§6dustRegular*§r\" will match all regular dusts, and \"§6dustTiny*§r\" will match all tiny piles.\n\nAll §bGregTech§r Filters can be configured using ghost items from §bJEI§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42068,7 +42140,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.\n", + "desc:8": "The §6Machine Controller§r is a cover that manages the operation of §bGregTech§r machines, similar to a §aSoft Hammer§r. These are crucial for §epassive automation§r, where a machine is dedicated to keeping something in stock for you.\n\n\"Machines\" here is broader than you might think. It of course works on single-block machines, but can also be used on §eMultiblock Controllers§r like your §3Electronic Blast Furnace§r. But it\u0027s even more flexible than that: you can use it on any §bGregTech§r block that accepts transfer covers, as long as the controllable cover is placed on it first! This means it also works for things like §6Chests§r, §6Drums§r, and Multiblock inputs.\n\nThe cover works by detecting a §eredstone signal§r. By default, the entire machine will be disabled if a sufficiently strong signal is detected by the cover.\n\nWhen you open the Machine Controller\u0027s GUI with a §aScrewdriver§r, you will see several options for configuring its behavior:\n\nThe strength of the signal required to trigger the Machine Controller is configurable using the top slider.\n\nAnother button allows you to select whether to control the whole machine (where applicable) or a specific cover. This lets you do things like stop moving items into a machine, but also allow the machine to continue working.\n\nSwitching from §eNormal§r to §eInverted§r mode will make the Machine Controller instead disable the machine until it receives the requisite redstone signal. This is often preferable when working with §6Level Emitters§r to prevent machines from starting up if your §eME Network§r is offline.\n\nSome use cases:\n• Control machines through vanilla redstone contraptions or a simple lever.\n\n• The §6Redstone Upgrades§r from §bStorage Drawers§r can be used when outputting into a drawer to make the drawer emit redstone that can control the machine.\n\n• When you progress to digital storage, an §6ME Level Emitter§r or §6ME Fluid Level Emitter§r can be used to emit signal based on specific items or fluids in your network.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42122,7 +42194,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.\n\n", + "desc:8": "The §6Processing Array§r is a §bGregTech§r multiblock that allows for processing multiple recipes in parallel in a single stucture and is extremely useful for saving space.\n\nUp to 16 of the same recipe can be processed in parallel by placing the machines for the recipe in exactly one §aMachine Access Interface§r in the multiblock structure, as well as the ingredients and non-consumable items (like §6Integrated Circuits§r) for the recipe you want to process in one or more input buses. While a recipe is running, the Machine Access Interface is §elocked§r and machines cannot be added or removed.\n\nNote that each machine will still draw the full voltage required for the recipe, which may be more than a single §aEnergy Input Hatch§r can provide. This is why the §6Processing Array§r has an astounding Hatch limit, and can support up to §e4 Energy Inputs§r on the structure. This allows you to get the needed 16 Amps of power to the machine from a single tier-appropriate §3CEF§r.\n\nProcessing Arrays distribute their buffered power at the appropriate voltage, so there\u0027s no danger of your machines exploding if you, for example, operate 16 HV machines off one amp of IV power.\n\nBecause the required number of Inputs, Outputs, and Casings is highly variable, this quest only asks you to craft the §6Processing Array Controller§r and the §aMachine Access Interface§r. Make sure your buses and hatches are large enough to hold the ingredients and outputs for the number of parallel crafts you\u0027re attempting, and that you\u0027re providing enough power for all those machines!\n\nAn advanced feature of the Processing Array is §eDistinct Bus Mode§r. This makes the Processing Array only consider a single item input bus at a time when determining whether it can run a recipe. This is useful when recipes for a particular machine require different catalyst items, like §6Integrated Circuits§r on different configurations or §6Extruder Shapes§r.\n\nDistinct Bus Mode may be enabled or disabled via the Processing Array controller by clicking in the designated area.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42348,7 +42420,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -42372,6 +42444,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 598, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, @@ -42650,7 +42740,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §6§3Pyrolyse Oven§r can make more interesting products than just §9Phenol§r.\n\n§a§9Charcoal Byproducts§r breaks down into various wood products, such as§9 Wood Tar§r,§9 Wood Gas§r, and §a§9Wood Vinegar§r, each of which can be further broken down into various useful chemical compounds, such as §a§9Toluene§r, §a§9Methanol§r, etc.\n\nHowever, to take full advantage of decomposing these wood products, a §6§3Distillation Tower§r is required, so that all possible outputs can be obtained. You will need more§e Distillation Tower Slices§r than requested in the§r Distillation Tower quest, so be prepared to spend some more §6Stainless Steel§r.", + "desc:8": "The §3Pyrolyse Oven§r can make more interesting products than just §9Phenol§r.\n\n§9Charcoal Byproducts§r breaks down into various wood products, such as§9 Wood Tar§r,§9 Wood Gas§r, and §9Wood Vinegar§r, each of which can be further broken down into various useful chemical compounds, such as §9Toluene§r, §9Methanol§r, etc.\n\nHowever, to take full advantage of decomposing these wood products, a §3Distillation Tower§r is required, so that all possible outputs can be obtained. You will need more§e Distillation Tower Slices§r than requested in the§r Distillation Tower quest, so be prepared to spend some more §6Stainless Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -42771,7 +42861,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r§r.\n\nTo create a portal, you must place a §aBed§r§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r§r You can use the §e/sethome§r§r command to register where your house is, and §e/home§r§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r§r. §6Skeleton Skulls§r would be the way to go in that case.", + "desc:8": "Whether or not you (or your server admin) picked the default §bLost Cities§r overworld type, you have the option of teleporting yourself to the §eLost Cities Dimension§r. This is useful if you like other world types but want to still be able to explore cities for things like §eloot and spawners§r.\n\nTo create a portal, you must place a §aBed§r down on two §6Blocks of Diamond§r. Then, you surround the bed with any kind of §eMonster Skulls§r. Sleep in this bed and you will be teleported there.\n\n§cDon\u0027t forget to have a way to get back!§r You can use the §e/sethome§r command to register where your house is, and §e/home§r to return to it. If you supply a name (default \"home\") then you can register and go to multiple locations. There are some §erestrictions§r on this though: §eit takes a few seconds of standing still to activate§r and there is a §ecooldown§r between uses.\n\nLater on you\u0027ll have other means of teleportation.\n\nMonster Skulls might take a little while to get if you\u0027re playing in §ePeaceful§r. §6Skeleton Skulls§r would be the way to go in that case.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43091,7 +43181,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6§6§6Interfaces§r§r§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.", + "desc:8": "This quest teaches you the basics about §bApplied Energistics 2§r autocrafting. If you are new this mod, it is highly recommended that you watch a video or read a guide online. Just remember that channels are disabled by default in this pack.\n\nBy now, you should have §6ME Interfaces, §6Molecular Assemblers, Crafting Units, Patterns§r and a §6Pattern Terminal§r. \n\nFirst, for all crafts, you\u0027ll need a §eCrafting CPU§r. These are structures that must be in a rectangular prism, and can be only one block. These compose of:\n* §6Crafting Storages§r, which determine how big a craft can be. For now, §64K Crafting Storages§r should be enough. You must have at least one per CPU.\n* §6Co-Processing Units§r, which are used to craft multiple things at once. These are optional.\n* §6Crafting Monitors§r, used to see what is crafting. Not needed, and you can right-click on the CPU to find out what is crafting anyways, so this is pretty much just decoration.\n* §6Crafting Units§r, which aren\u0027t needed at all, and are just used to fill holes, if you have a lack of materials.\n\nSecond, you\u0027ll need the place for the autocrafting. For Crafting Table recipes, you\u0027ll need §6Molecular Assemblers§r. §6Interfaces§r are placed next to them. Autocrafting with §bGregTech§r is explained later, in the quest following this one.\n\nFinally, you\u0027ll need a §6Pattern§r. In order to make this, put empty §6Patterns§r in the §6Pattern Terminal§r, and find the recipe in §bJEI§r, while still in the §6Pattern Terminal§r. Then, click \u0027+\u0027 in §bJEI§r, and press the arrow to encode the recipe. This goes in the §6Interface§r that you set up in the last step. You can use §6Interface Terminals§r to access §6Interfaces\u0027§r pattern slots.\n\nEventually, you\u0027ll need a lot of §6Patterns§r, lots of CPUs, and ones with more storage, and lots of §6Interfaces§r. If you run out of pattern slots in an §6Interface§r, you can add more §6Interfaces§r, or use newly added §6Pattern Expansion Cards§r, which add 9 slots each. You can have a maximum of 3 §6Pattern Expansion Cards§r in an §6Interface§r, which makes the amount of pattern slots go to 36.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43125,12 +43215,13 @@ }, "810:10": { "preRequisites:11": [ - 60 + 60, + 837 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6§6Vanadium Pentoxide§r is a catalyst used in the production of §9Sulfuric Acid§r and §9Phthalic Anhydride§r. \n", + "desc:8": "§6Vanadium Pentoxide§r is a catalyst used in the production of §9Sulfuric Acid§r and §9Phthalic Anhydride§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43312,7 +43403,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack!", + "desc:8": "§2Technically not new to CEu, but it was disabled in the original version, and it had much less functionality in CE.§r\n\nThe Arc Furnace allows you to make §6Annealed Copper§r, which will be used in the MV Age. It can also make 2 pieces of Glass from 1 Sand. Later, it can make §2Tempered Glass§r for use in higher-tier recipes.\n\nThe Arc Furnace also functions as a §auniversal recycling machine§r. Pretty much anything can be recycled into ingots and dusts of its base components.\n\nAll of its recipes require Oxygen.\n\nAll Arc Furnace recipes use exactly 30 EU/t, so you can get away with using LV Arc Furnaces for the whole pack. However, at §5EV§r, the Arc Furnace expands to 9 slots.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -43419,7 +43510,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.\n", + "desc:8": "§3Circuit Assemblers§r are the linchpin of your factory, gating progression through the §6Circuits§r. \n\nEach time you upgrade to a new voltage of Circuit Assembler, you will be able to craft more advanced §ethemes§r of circuits. These use more complex ingredients and require new infrastructure to be in place, but are more efficient to craft overall than the same tier of circuit from the prior theme.\n\n§2The LV Circuit Assembler allows you to make Electronic Circuits far more easily.\n\nThe circuit progression has been largely replaced with the progression native to CEu, with a few minor changes to reflect the progression of this pack better.§r Check out the §dProgression quest book tab§r to see the flow of circuit progression.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44007,7 +44098,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The §3§2Large Chemical Reactor (LCR)§r §2is a multiblock §3§2Chemical Reactor§r §2with more input/output slots.§r\n\nThe §3LCR§r can perform some exclusive reactions which allow you to combine multiple normal §3Chemical Reactor§r steps into a §6single step§r, such as:\n- §aNitrogen Dioxide§r\n- §r§aSulfuric Acid§r\n-§r §aEpichlorohydrin§r, needed for...\n-§r §aEpoxy§r\n\nThe §3LCR§r also is required to perform some recipes, such as §aRaw Gasoline§r production.\n\nAny other recipe which could be done in a normal §9Chemical Reactor§r, as well as certain §9Mixer§r recipes, can also be done in an §3LCR§r.\n\nAll §dOverclocks§r in the §3LCR§r are §6100% efficient§r; each overclock will §5quadruple the speed§r, as opposed to doubling it.", + "desc:8": "§2The §2Large Chemical Reactor (LCR)§r §2is a multiblock §2Chemical Reactor§r §2with more input/output slots.§r\n\nThe §3LCR§r can perform some exclusive reactions which allow you to combine multiple normal §3Chemical Reactor§r steps into a §6single step§r, such as:\n- §aNitrogen Dioxide§r\n- §aSulfuric Acid§r\n-§r §aEpichlorohydrin§r, needed for...\n-§r §aEpoxy§r\n\nThe §3LCR§r also is required to perform some recipes, such as §aRaw Gasoline§r production.\n\nAny other recipe which could be done in a normal §9Chemical Reactor§r, as well as certain §9Mixer§r recipes, can also be done in an §3LCR§r.\n\nAll §dOverclocks§r in the §3LCR§r are §6100% efficient§r; each overclock will §5quadruple the speed§r, as opposed to doubling it.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44073,12 +44164,13 @@ }, "827:10": { "preRequisites:11": [ + 65, 177 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A rudimentary version of Platinum Group Sludge (PGS) processing existed in the base pack. Here, it is a strong source of the Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum - as well as Gold. All of these elements will be used in IV-tier and above materials.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.", + "desc:8": "The §6Platinum Group Metals - Ruthenium, Rhodium, Palladium, Osmium, Iridium, and Platinum§r - are rare materials used in upcoming recipes. §6Ruthenium§r will be required now for the next tier of coils.\n\nThese materials can be obtained from ores exclusive to Microverse missions - §6Laurite Ore§r for Ruthenium, §6Cuprorhodsite Ore§r for Rhodium, and §6Osmiridium Ore§r and §6Iridosmine Ore§r for Osmium and Iridium. However, the yields of these ores from Microverse missions are small, so you should consider processing §6Platinum Group Sludge (PGS)§r for more.\n\n§rYou will need to treat certain ores with §9Nitric Acid§r to yield §6PGS§r - §6Sheldonite§r is the best. Then, using an §3HV+ Centrifuge§r and §9Aqua Regia§r, break it down into the PGS salts, and reduce those salts to the metals.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44091,7 +44183,7 @@ "issilent:1": 0, "lockedprogress:1": 0, "name:8": "§2Platinum Group Processing", - "questlogic:8": "AND", + "questlogic:8": "OR", "repeat_relative:1": 1, "repeattime:3": -1, "simultaneous:1": 0, @@ -44117,16 +44209,40 @@ "Count:3": 1, "Damage:2": 93, "OreDict:8": "", - "id:8": "gregtech:meta_ingot" - }, - "1:10": { - "Count:3": 1, - "Damage:2": 90, - "OreDict:8": "", - "id:8": "gregtech:meta_ingot" + "id:8": "gregtech:meta_dust" } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 90, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + }, + "1:10": { + "Count:3": 1, + "Damage:2": 75, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + }, + "2:10": { + "Count:3": 1, + "Damage:2": 50, + "OreDict:8": "", + "id:8": "gregtech:meta_dust" + } + }, + "taskID:8": "bq_standard:optional_retrieval" } } }, @@ -44137,7 +44253,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2This is the highest tier of polymer. It is used in crafting Advanced SMD components, ZPM+ Machine Hulls, among other things.\n\nThis polymer requires at least 14 processing steps to craft. Good luck!", + "desc:8": "This is the highest tier of polymer. It is used in crafting §2Advanced SMD components and ZPM+ Machine Hulls,§r among other things.\n\nThis polymer can require up to §914 steps§r to create from scratch, but multiple steps are able to be skipped through distillation of various liquids. §6Check what steps you can easily skip!§r", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44238,12 +44354,12 @@ }, "830:10": { "preRequisiteTypes:7": [ - 0, - 2 + 2, + 0 ], "preRequisites:11": [ - 93, - 89 + 89, + 93 ], "properties:10": { "betterquesting:10": { @@ -44354,7 +44470,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §o§c§opull§r fluids from the world location it is attached to, while Export will §o§9§opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.\n", + "desc:8": "§2Ender Fluid Link Covers are GTCEu\u0027s Ender Tanks§r. Each Cover sends their fluids through a frequency defined by an §68-digit hexadecimal number§r (0-9, then A-F for each digit). That gives you §64.29 billion§r channels to work with! \n\nEnder Fluid Link Covers work as long as their chunk is loaded - regardless of distance or dimension.\n\nSetting the mode to Import will §opull§r fluids from the world location it is attached to, while Export will §opush§r fluids to the world. You must turn the I/O to Enabled for it to start working. Each channel has a buffer of §d64 buckets§r.\n\nThe \"Virtual Tank Viewer\" app in your §4Terminal§r allows you to see the contents of all Ender Fluid Link channels. Regardless, I recommend you set up a system to organise all those channels. I would also advise against using the default channel (FFFFFFFF) in all cases.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44426,7 +44542,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §a§lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §a§lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §a§lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §a§lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", + "desc:8": "The §3Central Monitor§r enables you to oversee sections of your factory §eremotely§r! When paired with the §aWireless Digital Interface covers§r, it becomes possible for you to not only view §ethe status and capacity of your machines, but also access their GUIs and display the entirety of your §3multi-blocks§e right on the screen§r, providing §econvenient access to all relevant parts without leaving your seat§r!\n\nThe Central Monitor itself is a multi-block, capable of supporting a screen ranging §ein size from 3x2 to 14x9§r. Do remember to configure it to the correct size before building.\n\nSetting it up is straightforward. Start by crafting a Wireless Digital Interface. Once it\u0027s ready and in your hand, sneak-right click on the Central Monitor, then place it on any machine, be it a single- or multi-block, just like any other cover. After installation, right-click the Central Monitor and navigate to an available slot. The quantity of slots will depend on the Central Monitor\u0027s size.\n\nOnce in the slot menu, you\u0027ll see §ethe selected machine appearing on the right side of the screen§r. You can now choose the machine and, subject to the §aPlugin§r installed, exhibit pertinent information on the display. Most plugins offer the luxury of §eaccessing the chosen machine directly from the screen§r.\n\nHere\u0027s a snapshot of what different Plugins can do:\n\n- §lText Plugin§r: as the name suggests, it enables you to §ehave 16 different strings per Plugin§r, each having its own color.\n\n- §lOnline Picture Plugin§r: ideal for showcasing your favorite memes. Simply feed it a direct link to an image, and it will display it for all to see.\n\n- §lGUI Proxy Plugin§r: attaches the GUI of a selected machine to the screen, allowing direct machine access with a simple right-click. §cDon\u0027t forget to activate Proxy Mode on the right side of the menu!§r\n\n- §lAdvanced Monitor Proxy Plugin§r: this one takes the cake. It enables you to project entire multi-blocks onto the screen, giving you direct access to any visible part of the multi-block. This can all be done without ever needing to return to the actual machine.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44647,7 +44763,6 @@ "837:10": { "preRequisites:11": [ 91, - 810, 836 ], "properties:10": { @@ -44707,7 +44822,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Systems on Chip can be engraved with HV power and Glowstone Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", + "desc:8": "§2Systems on Chip can be engraved with HV power and Phosphorus Boules. This unlocks the ultimate tier one circuit recipe in the EV Circuit Assembler.\n\nThe ultimate tier two circuit recipe requires an IV Circuit Assembler.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -44726,7 +44841,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -44741,6 +44856,24 @@ "ignoreNBT:1": 0, "index:3": 0, "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 572, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, "requiredItems:9": { "0:10": { "Count:3": 1, @@ -44811,14 +44944,14 @@ }, "840:10": { "preRequisiteTypes:7": [ + 1, 0, - 0, - 2 + 0 ], "preRequisites:11": [ + 325, 791, - 841, - 325 + 841 ], "properties:10": { "betterquesting:10": { @@ -45037,7 +45170,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.\n", + "desc:8": "§2Trinium Coils§r are the eighth coil material available, increasing your EBF\u0027s operating temperature to 9001K so it can process more advanced materials.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45091,7 +45224,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A heavy Naquadah isotope with more nuclear capability.\n\n§r§6Enriched Naquadah§r is meant to be used in as-of-yet-unimplemented CEu-native reactors. It\u0027s used in small amounts for §3Trinium Coil blocks§r, or in Nomi reactors, though Naquadria is better for that purpose.\n\nAt least it\u0027s the easiest to obtain, and you can get it by mixing, the full Naquadah chain, or by passing Purified Naquadah Dust through an Electromagnetic Separator.", + "desc:8": "§2A heavy Naquadah isotope with more nuclear capability.\n\n§6Enriched Naquadah§r is meant to be used in as-of-yet-unimplemented CEu-native reactors. It\u0027s used in small amounts for §3Trinium Coil blocks§r, or in Nomi reactors, though Naquadria is better for that purpose.\n\nAt least it\u0027s the easiest to obtain, and you can get it by mixing, the full Naquadah chain, or by passing Purified Naquadah Dust through an Electromagnetic Separator.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45144,7 +45277,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§r§6Naquadria§o§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", + "desc:8": "§2A lighter and unstable Naquadah isotope.\n\n§6Naquadria§r is used in the construction of §6UV components§r, the §3Fusion Reactor Mk2§r, and in fusing §6Neutronium§r. Each piece of Naquadria also makes §d4 times§r more power than §6Enriched Naquadah§r in §3Naquadah Reactors§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45198,7 +45331,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A strong heavy element obtained from the Naquadah chain.\n\n§r§6Trinium§r can come from §6Kaemanite Ore§r, but you will probably want to bolster its production with §6Naquadah Dust§r processing. It comes out at the second stage, so if you don\u0027t mind storing the intermediates and have Fluorine under control, you can hold off doing the full chain if you don\u0027t need to yet. You get §d1 Trinium per 6 Naquadah processed§r.\n\nThis will be required in large quantities for §6Trinium Coils§r, §6Superconducting Coil Blocks§r, §6Naquadah Alloy§r, among other things. You will need 14 stacks at least for a §3Fusion Reactor Mk1§r, so stock up on it.", + "desc:8": "§2A strong heavy element obtained from the Naquadah chain.\n\n§6Trinium§r can come from §6Kaemanite Ore§r, but you will probably want to bolster its production with §6Naquadah Dust§r processing. It comes out at the second stage, so if you don\u0027t mind storing the intermediates and have Fluorine under control, you can hold off doing the full chain if you don\u0027t need to yet. You get §d1 Trinium per 6 Naquadah processed§r.\n\nThis will be required in large quantities for §6Trinium Coils§r, §6Superconducting Coil Blocks§r, §6Naquadah Alloy§r, among other things. You will need 14 stacks at least for a §3Fusion Reactor Mk1§r, so stock up on it.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45304,7 +45437,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Used for Advanced SMD components.", + "desc:8": "The §6IV Assembling Machine§r is required for§2 Advanced SMD components§r.\n\nConsider upgrading to a §6Large Assembling Factory§r, which is easier to upgrade and can accept Parallel Control Hatches. The §6Large Assembing Factory§r §ccannot be recipe tier overclocked§r, as it only accepts one Energy hatch. You will need to craft higher tier standard Assembling Machines for some higher tier items.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45721,7 +45854,7 @@ "simultaneous:1": 0, "snd_complete:8": "minecraft:entity.player.levelup", "snd_update:8": "minecraft:entity.player.levelup", - "tasklogic:8": "AND", + "tasklogic:8": "OR", "visibility:8": "ALWAYS" } }, @@ -45745,6 +45878,24 @@ } }, "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 599, + "OreDict:8": "", + "id:8": "gregtech:meta_item_1" + } + }, + "taskID:8": "bq_standard:retrieval" } } }, @@ -45755,7 +45906,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Used in building the Alloy Blast Smelter. \n\n§r§6Tantalum§r is obtained from §6Tantalite Ore§r, or in small quantities from centrifuging §eLava§r.\n\n§6Molybdenum§r is obtained from §6Molybdenum, Molybdenite, Powellite, and Wulfenite ores§r. They spawn together in the §eNether§r rarely, or some of them come from §3Tier One§r and §3Five Micro Miners§r.\n\n§2Remember, you need an appropriately tiered Mixer (HV for HSLA Steel, and EV for the others).", + "desc:8": "§2Used in building the Alloy Blast Smelter. \n\n§6Tantalum§r is obtained from §6Tantalite Ore§r, or in small quantities from centrifuging §eLava§r.\n\n§6Molybdenum§r is obtained from §6Molybdenum, Molybdenite, Powellite, and Wulfenite ores§r. They spawn together in the §eNether§r rarely, or some of them come from §3Tier One§r and §3Five Micro Miners§r.\n\n§2Remember, you need an appropriately tiered Mixer (HV for HSLA Steel, and EV for the others).", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -45827,7 +45978,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §e§eConductive Iron§r§r, and §e§eDark Steel§r§r.", + "desc:8": "§2The Alloy Blast Smelter directly smelts dust combinations into molten Alloys, skipping the Mixer step, and applying a 3/4 discount to your EBF time. Some molten alloys may need to be cooled in a Vacuum Freezer before being usable.\n\n§rThis is the only way to create some of the advanced alloys used in multiblock machines. You can also use it for most normal alloys if you want. In particular, the yield of §6Energetic Alloy§r and §6Vibrant Alloy§r is §ddoubled§r.\n\nYou can also use the ABS for most Alloy Smelter alloys, apart from §6Steel§r, like §eInvar§r, §eConductive Iron§r, and §eDark Steel§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47039,7 +47190,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Configurable to output any number of GT Volts and Amps.", + "desc:8": "An upgrade from the §6Creative RF Source§r, this can be configured to output any amount of GT Volts and Amps.\n\nThis can also connect to a §bLaser Network§r directly!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47684,7 +47835,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Certain multiblocks in CEu will require a Maintenance Hatch and/or Muffler Hatch. These cannot be shared between multiblocks. If you knew Maintenance in GT5u, fret not - Maintenance mechanics are far less punishing in CEu.\n\n§r- §aMuffler§r: This hatch must be §cunobstructed§r so it can output its beautiful smoke particles. When a recipe is performed, there is a small chance for the §3Muffler Hatch§r to give bonus items, typically tiny Dusts of Ash. It voids excess when full, so do not worry about it stopping machines from running.\n\n- §aMaintenance§r: You will need to do Maintenance for the Multiblock to begin operating. This is done by having a §9Wrench§r, a §9Screwdriver§r, a §9Soft Mallet§r, a §9Hammer§r, a §9Wire Cutter§r, and a §9Crowbar§r in your inventory, opening the Maintenance Hatch and §eclicking the center spot once§r. §cNo need to move tools individually§r. Alternatively, you can fix problems by placing §9Tape§r in the Maintenance Hatch. \n\nMaintenance problems may occur after §d48 real hours of activity§r. Needless to say, they are very rare. Each problem increases the recipe durations by 10%. Fixing the problems is done the same way as above.\n\nLater, you will unlock other Maintenance Hatches that do not enforce fixing the problems manually. Both start with §6no Maintenance required§r:\n\n- §3Automatic Maintenance Hatch§r (§1IV§r): Eliminates the need for Maintenance, §6forever§r.\n\n- §3Configurable Maintenance Hatch§r (§6HV§r): You can configure it to cut off §a10% duration§r on recipes, at the cost of making Maintenance issues happen three times as fast. That is §d16 real hours§r of activity. §9Tape§r can fix problems in this Hatch as well.\n", + "desc:8": "§2Certain multiblocks in CEu will require a Maintenance Hatch and/or Muffler Hatch. These cannot be shared between multiblocks. If you knew Maintenance in GT5u, fret not - Maintenance mechanics are far less punishing in CEu.\n\n§r- §aMuffler§r: This hatch must be §cunobstructed§r so it can output its beautiful smoke particles. When a recipe is performed, there is a small chance for the §3Muffler Hatch§r to give bonus items, typically tiny Dusts of Ash. It voids excess when full, so do not worry about it stopping machines from running.\n\n- §aMaintenance§r: You will need to do Maintenance for the Multiblock to begin operating. This is done by having a §9Wrench§r, a §9Screwdriver§r, a §9Soft Mallet§r, a §9Hammer§r, a §9Wire Cutter§r, and a §9Crowbar§r in your inventory, opening the Maintenance Hatch and §eclicking the center spot once§r. §cNo need to move tools individually§r. Alternatively, you can fix problems by placing §9Tape§r in the Maintenance Hatch. \n\nMaintenance problems may occur after §d48 real hours of activity§r. Needless to say, they are very rare. Each problem increases the recipe durations by 10%. Fixing the problems is done the same way as above.\n\nLater, you will unlock other Maintenance Hatches that do not enforce fixing the problems manually. Both start with §6no Maintenance required§r:\n\n- §3Automatic Maintenance Hatch§r (§1IV§r): Eliminates the need for Maintenance, §6forever§r.\n\n- §3Configurable Maintenance Hatch§r (§6HV§r): You can configure it to cut off §a10% duration§r on recipes, at the cost of making Maintenance issues happen three times as fast. That is §d16 real hours§r of activity. §9Tape§r can fix problems in this Hatch as well.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -47884,13 +48035,14 @@ }, "897:10": { "preRequisites:11": [ + 52, 830, 896 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2With Silver, LPICs, NaK, and an HV Assembler, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.", + "desc:8": "With §6Silver, LPICs§r, §9NaK§r, and an §6HV Assembler§r, you can finally make HV Energy and Dynamo hatches.\n\nYou should get the gist of making these now, so there will not be further quests on Energy and Dynamo hatches.\n\nLook out for a new more efficient EV-tier recipe for §6Steel§r in the EBF.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48144,7 +48296,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The Tablet device you now get is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, §9§9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",\n", + "desc:8": "§2The Tablet device you now get is very valuable to do plenty of tasks in GregTech.§r\n\n§oBe careful with removing the battery. Removing it will cause it to become a normal HV battery, and will no longer have 6.4m EU.§r\n\nThis Quest explains how you can use the §4Terminal§r. §bThis is merely basic information, you can skip this for a while as the Terminal isn\u0027t used much in the early game§r.\n\n§4IMPORTANT:§r If you the terminal freezes, you can press §eControl + E§r to force exit it.\n\nThe Terminal runs on §4GregOS™§r (not an actual Trademark), an operating system which works with §5Applications§r.\n\n§9Machines Guides§r, §9Multiblock Guides§r, §9Item Guides§r, §9Tutorials§r are what they sound like. Note that they are currently still being worked on.\n\n§9System Settings§r changes... settings (duh) related to the Terminal. You can §bset your own background picture§r, remove the double confirmation on exit, and more. Most of the keybinds apply to the §5Home§r button. Double clicking by default exists any open Application.\n\n§9Multiblock Helper§r is split into two functionalities. The first one requires a requires a §dLV§r Battery and a §dCamera§r mounted to enable §bVR visualization§r of multiblock structures. The upgrade unlocked at §6HV§r allows you to §6debug§r and §6auto-build§r.\n\n§9Battery Manager§r, assuming you have a Battery mounted, checks the Energy level and indicates energy usage of other Apps.\n\n§9Hardware Manager§r is used to mount Hardwares, such as Battery, to enable other Apps.\n\n§9App Store§r (not exactly a Store) adds Apps to your collection, and allows upgrades for some of them. Keep in mind Apps may still require specific mounted devices to function.\n\n§9Ore Prospector§r works the same way as the portable §dProspector§r and can be upgraded several times.\n\n§9Fluid Prospector§r works the same way as the portable §dProspector§r (but for fluids!) and can be upgraded several times.\n\n§9Recipe Chart§r is a wonderful chart planner to build Recipe Chains and visualize them.\n\n§9GT Console§r configures machines as if you were using regular tools, but without using them! This is similar to the remote access from the §3Central Monitor§r.\n\n§9World Prospector§r is a §dX-Ray VR§r for filtered blocks.\n\n§9Virtual Tank Viewer§r is used in combination with §3Ender Fluid Covers§r. It stores information about all your §dVirtual Tanks§r.\n\n§9Cape Selector§r lets you become fancy! You can have your characters wear a fancy §dCape§r.\",", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48256,7 +48408,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2The coil recipes are harder in CEu, not only do they require their base material, they also need some extra material types and they must be made in Assembling Machines of their tier.\n\nFor Cupronickel Coils, you will need 8 Cupronickel, 2 Bronze, and 1 Tin Alloy for each coil. You need 16 for the Electric Blast Furnace and 16 for the Pyrolyse Oven. That totals to 176 Copper, 128 Nickel, 32 Tin, and 16 Iron.", + "desc:8": "§6Cupronickel Coils§r form part of the structure of a few multiblocks. Presently, those are the §3Electric Blast Furnace§r and §3Pyrolyse Oven§r. Each tier of coil unlocks new recipes and provides various bonuses to the multiblock they are attached to.\n\nCupronickel Coils are produced in the §3Assembler§r with §62x Cupronickel Wire§r, §6Bronze Foil§r, and §9Tin Alloy fluid§r.\n\nFor now, you need 16 coils for the §3Electric Blast Furnace§r and 16 for the §3Pyrolyse Oven§r. That totals to §6176 Copper§r, §6128 Nickel§r, §632 Tin§r, and §616 Iron§r.\n\nHave fun mining!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48415,7 +48567,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily.", + "desc:8": "§2Multiblock version of the Circuit Assembler. Can accept Parallel Control Hatches, and allows tiering it up more easily. \n\nNote that like the Large Assembling Machine, the Large Circuit Assembler §ccannot use more than one Energy Hatch§2, preventing it from recipe tier overclocking.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -48675,7 +48827,7 @@ }, "911:10": { "preRequisites:11": [ - 409 + 38 ], "properties:10": { "betterquesting:10": { @@ -48728,8 +48880,8 @@ }, "912:10": { "preRequisites:11": [ - 344, - 233 + 233, + 344 ], "properties:10": { "betterquesting:10": { @@ -48908,9 +49060,9 @@ }, "915:10": { "preRequisites:11": [ + 62, 494, - 729, - 62 + 729 ], "properties:10": { "betterquesting:10": { @@ -49016,11 +49168,11 @@ }, "917:10": { "preRequisites:11": [ - 62, - 230, - 148, 54, - 132 + 62, + 132, + 148, + 230 ], "properties:10": { "betterquesting:10": { @@ -49087,8 +49239,8 @@ }, "918:10": { "preRequisites:11": [ - 917, - 391 + 391, + 917 ], "properties:10": { "betterquesting:10": { @@ -49198,14 +49350,14 @@ }, "920:10": { "preRequisiteTypes:7": [ - 2, 0, - 0 + 0, + 2 ], "preRequisites:11": [ - 848, 239, - 776 + 776, + 848 ], "properties:10": { "betterquesting:10": { @@ -49313,9 +49465,9 @@ }, "922:10": { "preRequisites:11": [ - 757, + 150, 174, - 150 + 757 ], "properties:10": { "betterquesting:10": { @@ -49461,7 +49613,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this. ", + "desc:8": "You\u0027re going to craft a LOT of stuff using §bDraconic Evolution §6Fusion§r. Therefore, a way to automate it is crucial.\n\nFirst, place an §6Item Laser Relay§r on each §aInjector§r, one on the §aCore§r, and one on an §aItem Interface§r. You\u0027ll notice that you will need 2 more item lasers than your amount of Injectors.\n\nConnect them all to the Item Interface with your §6Laser Wrench§r. Pretty much, just click on one of the lasers, and click on your Item Interface.\n\n§eOne important thing to note is that lasers appear to be \"placed\" on a particular block but they will interact with all adjacent (non-laser) blocks.§r \n\n§cWarning: be careful not to place a second laser on a laser network adjacent to the network\u0027s Item Interface. This will immediately crash your game because it creates a cycle in the network. You will have to either restore from backup or edit the level.dat directly to remove the block to play again.§r\n\nUse the §6Compass§r to change the Laser on the core\u0027s piority to 1. \n\nFinally, place the §aRedstone Clock§r next to the core. \n\nYou also need to setup some mechanism to take the finished item out of the core. A Phantomface works well here, as it will only output the output item, and not the input item.\n\nImport into the Item Interface. You can use the Extended Processing Pattern Terminal and an Interface with Blocking Mode to do this.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49597,7 +49749,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2A brand new and highly requested mod to CEu to help you manage your tools!§r\n\nThe §eTool Belt§r is a item, which can store your tools, and exchange them easily! Right now, it has 2 slots, but later, once you unlock §6Steel§r, you can upgrade it with §6Belt Pouches§r, all the way to 9 slots, with an §3Anvil§r and some §aXP§r!\n\nMake the Tool Belt, and you can use the keybind (default is `R\u0027), while the belt is in your inventory or Bauble Slots §cand you are holding something, or the belt is not empty§r, to open its GUI. \n\nAlternatively, you can right click while holding the belt to open its inventory.\n\nThe Tool Belt is equipable as a §bBauble§r. Open your inventory and look for the Baubles button, and click it to reveal the additional bauble slots menu, and then put it in the Belt Slot. Or, just click in every bauble slot until it goes in, if you can\u0027t tell which bauble slot looks like a belt.\n\nThe Tool Belt can store anything with a stack size of 1, like swords, pickaxes, §bGregTech§r tools, and the §6Terminal§r. It has also been modified a bit, so it also allows any §bStorage Drawers§r key, and §cdoesn\u0027t allow any Thermal Satchel§r.\n\nNow, you can insert and extract from the belt! You can also use the Keybinds `§eCycle Tool Left§r\u0027 and `§eCycle Tool Right§r\u0027 whilst you are in the GUI.\n", + "desc:8": "§2A brand new and highly requested mod to CEu to help you manage your tools!§r\n\nThe §eTool Belt§r is a item, which can store your tools, and exchange them easily! Right now, it has 2 slots, but later, once you unlock §6Steel§r, you can upgrade it with §6Belt Pouches§r, all the way to 9 slots, with an §3Anvil§r and some §aXP§r!\n\nMake the Tool Belt, and you can use the keybind (default is `R\u0027), while the belt is in your inventory or Bauble Slots §cand you are holding something, or the belt is not empty§r, to open its GUI. \n\nAlternatively, you can right click while holding the belt to open its inventory.\n\nThe Tool Belt is equipable as a §bBauble§r. Open your inventory and look for the Baubles button, and click it to reveal the additional bauble slots menu, and then put it in the Belt Slot. Or, just click in every bauble slot until it goes in, if you can\u0027t tell which bauble slot looks like a belt.\n\nThe Tool Belt can store anything with a stack size of 1, like swords, pickaxes, §bGregTech§r tools, and the §6Terminal§r. It has also been modified a bit, so it also allows any §bStorage Drawers§r key, and §cdoesn\u0027t allow any Thermal Satchel§r.\n\nNow, you can insert and extract from the belt! You can also use the Keybinds `§eCycle Tool Left§r\u0027 and `§eCycle Tool Right§r\u0027 whilst you are in the GUI.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49703,7 +49855,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.\n", + "desc:8": "Having trouble finding a biome? Never fear, the §6Nature’s Compass§r is here! For a very small price, you’ll be able to find any biome your heart pleases!\n\n§bRight-clicking§r with the Nature’s Compass in hand will open the §eSelect Biome GUI§r, where you can search any biome, modded or vanilla. Once you find the desired biome, double click or hit §aStart Search§r, and the compass will now point you in the direction of the biome, and tell you how far it it is.\n\nIn the top left of the Select Biome GUI, you can hit the §aInfo§r button for additional information on the biome. You can also press §aSort By§r to change how the biomes are organized.\n\nOnce you have found your desired biome, you can §bshift right-click§r while holding the compass to clear the selected biome. When no biome is selected, the compass will simply point to world spawn.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -49753,8 +49905,8 @@ }, "930:10": { "preRequisites:11": [ - 100, - 98 + 98, + 100 ], "properties:10": { "betterquesting:10": { @@ -50223,8 +50375,8 @@ }, "933:10": { "preRequisites:11": [ - 56, - 53 + 53, + 56 ], "properties:10": { "betterquesting:10": { @@ -50340,7 +50492,7 @@ "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionalidy it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", + "desc:8": "Handling §6Patterns§r gets tedious pretty quickly, from not having enough slots to move tens of them at a time, to having to multiply them when upgrading your §3Large Machines§r, which, when equipped with §3Parallel Control Hatches§r, may require you to supply more than one item at a time to utilize them to their fullest.\n\nYou don\u0027t want to supply one ingot and get two wires when your §3Large Wire Factory§r can take §e64 ingots§r and make §e128 wires§r at a time, right?\n\nThat\u0027s where the the §6Pattern Multi-Tool§r comes into play. Granted, multiplying patterns early on is not something that you need right away, but there\u0027s more to this little thing.\n\nThe base functionality it provides is its UI, which makes it possible to §emove, multiply, divide and clear patterns in bulk§r. When an §3ME Interface§r is right-clicked, the multi-tool directly interfaces with it as well.\n\nMuch like the §eNetwork Tool§r, the multi-tool is capable of adding its own UI to all relevant §3Terminals§r where patterns can be utilized, most notably §3ME Interface Terminals§r, allowing you to adjust your patterns on the fly.\n\nAs a bonus, it can also hold §6Blank Patterns§r, injecting them into your §3Pattern Terminals§r may you ever run out of them. Fill this thing with blanks!", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -50563,6 +50715,3426 @@ } }, "939:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 939, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "940:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 940, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "941:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 941, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "942:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 942, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "943:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 943, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "944:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 944, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "945:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 945, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "946:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 946, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "947:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 947, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "948:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 948, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "949:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 949, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "950:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 950, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "951:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 951, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "952:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 952, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "953:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 953, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "954:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 954, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "955:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 955, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "956:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 956, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "957:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 957, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "958:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 958, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "959:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 959, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "960:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 960, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "961:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 961, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "962:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 962, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "963:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 963, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "964:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 964, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "965:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 965, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "966:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 966, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "967:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 967, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "968:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 968, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "969:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 969, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "970:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 970, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "971:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 971, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "972:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 972, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "973:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 973, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "974:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 974, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "975:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 975, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "976:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 976, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "977:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 977, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "978:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 978, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "979:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 979, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "980:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 980, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "981:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 981, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "982:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 982, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "983:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 983, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "984:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 984, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "985:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 985, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "986:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 986, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "987:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 987, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "988:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 988, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "989:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 989, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "990:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 990, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "991:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 991, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "992:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 992, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "993:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 993, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "994:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 994, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "995:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 995, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "996:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 996, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "997:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 997, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "998:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 998, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "999:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 999, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1000:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1000, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1001:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1001, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1002:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1002, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1003:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1003, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1004:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1004, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1005:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1005, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1006:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1006, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1007:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1007, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1008:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1008, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1009:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1009, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1010:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1010, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1011:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1011, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1012:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1012, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1013:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1013, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1014:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1014, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1015:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1015, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1016:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1016, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1017:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1017, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1018:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1018, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1019:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1019, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1020:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1020, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1021:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1021, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1022:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1022, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1023:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1023, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1024:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1024, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1025:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1025, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1026:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1026, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1027:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1027, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1028:10": { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN" + } + }, + "questID:3": 1028, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1029:10": { "preRequisites:11": [ 192 ], @@ -50621,7 +54193,7 @@ } } }, - "940:10": { + "1030:10": { "preRequisiteTypes:7": [ 1 ], @@ -50683,12 +54255,14 @@ } } }, - "941:10": { + "1031:10": { "preRequisiteTypes:7": [ - 2 + 1, + 1 ], "preRequisites:11": [ - 286 + 286, + 1035 ], "properties:10": { "betterquesting:10": { @@ -50739,7 +54313,7 @@ } } }, - "942:10": { + "1032:10": { "preRequisites:11": [ 109, 339 @@ -50799,10 +54373,10 @@ } } }, - "943:10": { + "1033:10": { "preRequisites:11": [ - 102, - 339 + 339, + 729 ], "properties:10": { "betterquesting:10": { @@ -50859,7 +54433,7 @@ } } }, - "944:10": { + "1034:10": { "preRequisites:11": [ 286, 1037 @@ -50937,11 +54511,12 @@ } } }, - "945:10": { + "1035:10": { "preRequisites:11": [ - 1037, 286, - 325 + 325, + 844, + 1037 ], "properties:10": { "betterquesting:10": { @@ -51022,10 +54597,10 @@ } } }, - "946:10": { + "1036:10": { "preRequisites:11": [ - 1037, - 286 + 286, + 1037 ], "properties:10": { "betterquesting:10": { @@ -51118,14 +54693,15 @@ } } }, - "947:10": { + "1037:10": { "preRequisites:11": [ + 328, 825 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", + "desc:8": "§2Optical Fiber Cables§r are used to transfer §eResearch Data§r between §3Data Banks§r and §3Assembly Lines§r, or §eComputation Data§r between §3High Performance Computation Arrays§r, §3Network Switches§r, and §3Research Stations§r.\n\nNote that Optical connections are limited to one §aTransmission Hatch§r to one §aReception Hatch§r.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51171,15 +54747,15 @@ } } }, - "948:10": { + "1038:10": { "preRequisites:11": [ - 1039, - 196 + 196, + 1039 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", + "desc:8": "The §3Network Switch§r combines any number of §3Computation Data Reception Hatches§r into any number of §3Computation Data Transmission Hatches§r. This will be required when the §dCWU/t§r requirements of your §3Research Station§r exceed what a single §3HPCA§r can provide.\n\nConnect the §3Computation Data Reception Hatches§r to your §3HPCAs§r with §3Bridge Components§r within them, and connect a single §3Computation Data Transmission Hatch§r to your §3Research Station§r, and it will receive the sum of §dCWU/t§r from all of your HPCAs!\n\nNow, all §3Assembly Line§r recipes are available to you, given you have the §dCWU/t§r to research them. The most computationally demanding scan, for the §6Ultimate Battery§r, requires §d144 CWU/t§r.\n\nThe Network Switch consumes §d7,680 EU/t§r per §3Computation Hatch§r in its structure.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51243,10 +54819,10 @@ } } }, - "949:10": { + "1039:10": { "preRequisites:11": [ - 535, - 258 + 258, + 535 ], "properties:10": { "betterquesting:10": { @@ -51297,7 +54873,7 @@ } } }, - "950:10": { + "1040:10": { "preRequisites:11": [ 259 ], @@ -51350,14 +54926,14 @@ } } }, - "951:10": { + "1041:10": { "preRequisites:11": [ 157 ], "properties:10": { "betterquesting:10": { "autoclaim:1": 0, - "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", + "desc:8": "§6Silicon§r in its solid form is required to produce §6Transistors§r, which are required for §6HV Circuits§r. Notice that the recipe for a §6Hot Silicon Ingot§r calls for §d2,273 K§r. This is why we built §6Kanthal Coils§r earlier - §6Cupronickel Coils§r can\u0027t reach that temperature.\n\nDirectly heating §6Silicon Dust§r you get from Electrolyzing various materials is an option, but a slow and energy-hungry one. The better method is to obtain §6Silicon Dioxide Dust§r by repurposing the §6Glass§r you\u0027re producing for PPC, and heat it with §6Carbon Dust§r. This produces §6Silicon Ingots§r §dover 5x§r faster, with a side of §eCarbon Monoxide§r for use in various chemical processes.\n\nDon\u0027t forget that what comes out of the §3EBF§r is a §6Hot Ingot§r - cool it in a §6Chemical Bath§r first before using. Later, you will build a §3Vacuum Freezer§r which can do it better.", "globalshare:1": 0, "icon:10": { "Count:3": 1, @@ -51403,12 +54979,14 @@ } } }, - "952:10": { + "1042:10": { "preRequisiteTypes:7": [ - 1 + 1, + 2 ], "preRequisites:11": [ - 524 + 524, + 847 ], "properties:10": { "betterquesting:10": { @@ -51471,7 +55049,7 @@ } } }, - "953:10": { + "1043:10": { "preRequisites:11": [ 286 ], @@ -51524,7 +55102,7 @@ } } }, - "954:10": { + "1044:10": { "preRequisiteTypes:7": [ 1 ], @@ -51579,6 +55157,416 @@ "taskID:8": "bq_standard:retrieval" } } + }, + "1045:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Starting at §5EV§r, 4A Energy and Dynamo hatches are available at each tier. From §1IV§r onwards, 16A hatches will be available.\n\nNote that these hatches will not allow you to \"skip\" tiers! The maximum §erecipe tier§r a multiblock can run is determined by the tier of the hatch. If two hatches of the same tier are in the multiblock, the recipe tier will be increased to the next higher tier.\n\nInstead, these hatches can allow you to overclock recipes you can already do even more. The §eoverclock tier§r is the total EU/t input summed across all hatches.\n\nExamples:\n\n- 2x §7LV§r hatch -\u003e §bMV§r recipe tier, §bMV§r OC tier\n\n- 16A §1IV§r hatch -\u003e §1IV§r recipe tier, §cZPM§r OC tier\n\n- 2x 16A §1IV§r hatch -\u003e §dLuV§r recipe tier, 2A §cZPM§r OC tier\n\nIf in doubt, check the multiblock\u0027s GUI. It will show the max recipe tier, as well as max EU/t for overclocking.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "High Amperage Energy Hatches", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1045, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1399, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + }, + "1:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 1, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1245, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:optional_retrieval" + } + } + }, + "1046:10": { + "preRequisites:11": [ + 56 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §aAlarm§r is a simple tool which plays a loud sound when given a redstone signal. Useful for notifying you if things go wrong.\n\nRight-click the block to configure its range and sound. This tool requires §d4 EU/t§r input to work.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 10, + "OreDict:8": "", + "id:8": "gregtech:warning_sign" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Alarm", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1046, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1751, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1047:10": { + "preRequisites:11": [ + 339 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Reservoir Hatch§r acts as an infinite water source as a fluid input hatch.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Cooking for Blockheads", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1047, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 1418, + "OreDict:8": "", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1048:10": { + "preRequisites:11": [ + 3 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "The §6Electric Prospector\u0027s Scanner§r given for free now has integration with §eJourneyMap§r.\n\nPick up surface rocks, right-click ore blocks, or use an electric prospector on ore mode to discover veins.\n\nPress the \"action key\" (default: delete) while hovering over a vein to mark it as depleted (or not depleted).\n\nDouble-click a vein to mark it as a waypoint, and again to unmark it.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:filled_map" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Visual Ores", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1048, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1049:10": { + "preRequisiteTypes:7": [ + 1, + 1 + ], + "preRequisites:11": [ + 22, + 60 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Most multiblocks now support rotation along any axis. Right-click with a Wrench on a face with a rotation ↺ symbol to rotate the controller.\n\nThe rules for building multiblocks remain the same.\n\nTake your setups to a new dimension!\n\nThe §3Cleanroom§r, §3Multiblock Miners/Drills§r, and §3Distillation Tower§r do not support being rotated.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "redstonearsenal:tool.wrench_flux", + "tag:10": { + "Energy:3": 0 + } + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Multiblock Rotation", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1049, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } + }, + "1050:10": { + "preRequisites:11": [ + 53 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "§oThis quest accepts LV, MV or HV Miner.§r\n\nThe §3Miner§r mines ore blocks directly below it in a certain radius. Higher tier Miners operate faster and have larger covered areas.\n\nThe LV Miner calls for an §6LV Sensor§r, which requires a bit of §6Quartzite§r.\n\nAlthough there is no Singleblock Miner at §5EV§r, you can build §3Large Miners§r at §9IV§r.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "", + "id:8": "gregtech:machine" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Automatic Mining", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1050, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "entryLogic:8": "AND", + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "partialMatch:1": 1, + "requiredItems:9": { + "0:10": { + "Count:3": 1, + "Damage:2": 920, + "OreDict:8": "questbookSingleMiner", + "id:8": "gregtech:machine" + } + }, + "taskID:8": "bq_standard:retrieval" + } + } + }, + "1051:10": { + "preRequisites:11": [ + 55, + 72 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "To operate your future §bElectric Blast Furnace§r, you will need §6Hatches and Buses§r.\n\nIn order to make those, you will need §9Glue§r. Luckily, this is quite simple to make. Simply put some of your §6Sticky Resin§r into a §3Centrifuge§r!", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "forge:bucketfilled", + "tag:10": { + "Amount:3": 1000, + "FluidName:8": "glue" + } + }, + "ignoresview:1": 0, + "ismain:1": 1, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "§2Glue", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1051, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "autoConsume:1": 0, + "consume:1": 0, + "groupDetect:1": 0, + "ignoreNBT:1": 0, + "index:3": 0, + "requiredFluids:9": { + "0:10": { + "Amount:3": 1000, + "FluidName:8": "glue" + } + }, + "taskID:8": "bq_standard:fluid" + } + } + }, + "1052:10": { + "preRequisites:11": [ + 55, + 727 + ], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "§3Centrifuges§r provide you with §21 tiny pile§r of additional materials when processing ore dusts (§e9 tiny piles \u003d 1 dust§r). Sometimes it\u0027s the main dust, but often it\u0027s a different useful material that is otherwise unobtainable.\n\nInstead of washing §6impure dusts§r (made from macerating or hammering ores) in a cauldron, you can get more out of each dust by centrifuging it. The same is true of §6pure dusts§r, when you eventually make a §3Washer§r or §3Chemical Bath§r. Note however that pure and impure dusts will usually give different byproducts (always check in §bJEI§r).\n\nCentrifuges also have other uses like unmixing compound dusts and fluids, or getting §6Rubber Pulp§r, which can be chemically reacted with §6Sulfur§r to efficiently make §9Liquid Rubber§r.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 1, + "Damage:2": 4, + "OreDict:8": "", + "id:8": "gregtech:meta_dust_tiny" + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 0, + "lockedprogress:1": 0, + "name:8": "Ore Processing with Centrifuges", + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "ALWAYS" + } + }, + "questID:3": 1052, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox" + } + } } }, "questLines:9": { @@ -51700,354 +55688,389 @@ "y:3": 220 }, "14:10": { + "id:3": 55, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -792, + "y:3": 272 + }, + "15:10": { "id:3": 59, "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, "y:3": 232 }, - "15:10": { + "16:10": { "id:3": 60, "sizeX:3": 48, "sizeY:3": 48, "x:3": -748, "y:3": 340 }, - "16:10": { + "17:10": { "id:3": 69, "sizeX:3": 24, "sizeY:3": 24, "x:3": -648, "y:3": 352 }, - "17:10": { + "18:10": { "id:3": 72, "sizeX:3": 56, "sizeY:3": 56, "x:3": -908, "y:3": 288 }, - "18:10": { + "19:10": { "id:3": 145, "sizeX:3": 30, "sizeY:3": 30, "x:3": -895, "y:3": 181 }, - "19:10": { + "20:10": { "id:3": 146, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 128 }, - "20:10": { + "21:10": { "id:3": 147, "sizeX:3": 24, "sizeY:3": 24, "x:3": -840, "y:3": 232 }, - "21:10": { + "22:10": { "id:3": 215, "sizeX:3": 24, "sizeY:3": 24, "x:3": -840, "y:3": 80 }, - "22:10": { + "23:10": { "id:3": 228, "sizeX:3": 24, "sizeY:3": 24, "x:3": -560, "y:3": 80 }, - "23:10": { + "24:10": { "id:3": 231, "sizeX:3": 24, "sizeY:3": 24, "x:3": -700, "y:3": 400 }, - "24:10": { + "25:10": { "id:3": 259, "sizeX:3": 48, "sizeY:3": 48, "x:3": -660, "y:3": 388 }, - "25:10": { + "26:10": { "id:3": 260, "sizeX:3": 24, "sizeY:3": 24, "x:3": -648, "y:3": 232 }, - "26:10": { + "27:10": { "id:3": 270, "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, - "y:3": 128 + "y:3": 80 }, - "27:10": { + "28:10": { "id:3": 272, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 160 }, - "28:10": { + "29:10": { "id:3": 273, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 400 }, - "29:10": { + "30:10": { "id:3": 282, "sizeX:3": 48, "sizeY:3": 48, "x:3": -480, "y:3": 116 }, - "30:10": { + "31:10": { "id:3": 296, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 128 }, - "31:10": { + "32:10": { "id:3": 352, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 80 }, - "32:10": { + "33:10": { "id:3": 402, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 354 }, - "33:10": { + "34:10": { "id:3": 403, "sizeX:3": 36, "sizeY:3": 36, "x:3": -492, "y:3": 354 }, - "34:10": { + "35:10": { "id:3": 413, "sizeX:3": 24, "sizeY:3": 24, "x:3": -892, "y:3": 128 }, - "35:10": { + "36:10": { "id:3": 489, "sizeX:3": 24, "sizeY:3": 24, "x:3": -984, "y:3": 184 }, - "36:10": { + "37:10": { "id:3": 490, "sizeX:3": 24, "sizeY:3": 24, "x:3": -560, "y:3": 128 }, - "37:10": { + "38:10": { "id:3": 497, "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, "y:3": 232 }, - "38:10": { + "39:10": { "id:3": 498, "sizeX:3": 24, "sizeY:3": 24, "x:3": -840, "y:3": 400 }, - "39:10": { + "40:10": { "id:3": 516, "sizeX:3": 24, "sizeY:3": 24, "x:3": -792, "y:3": 304 }, - "40:10": { + "41:10": { "id:3": 517, "sizeX:3": 24, "sizeY:3": 24, "x:3": -892, "y:3": 232 }, - "41:10": { + "42:10": { "id:3": 528, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 196 }, - "42:10": { + "43:10": { "id:3": 544, "sizeX:3": 24, "sizeY:3": 24, "x:3": -696, "y:3": 268 }, - "43:10": { + "44:10": { "id:3": 545, "sizeX:3": 24, "sizeY:3": 24, "x:3": -648, "y:3": 304 }, - "44:10": { + "45:10": { "id:3": 548, "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, "y:3": 80 }, - "45:10": { + "46:10": { "id:3": 553, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 80 }, - "46:10": { + "47:10": { "id:3": 554, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 48 }, - "47:10": { + "48:10": { "id:3": 559, "sizeX:3": 24, "sizeY:3": 24, "x:3": -700, "y:3": 436 }, - "48:10": { + "49:10": { "id:3": 684, "sizeX:3": 24, "sizeY:3": 24, "x:3": -504, "y:3": 80 }, - "49:10": { + "50:10": { "id:3": 774, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -840, - "y:3": 184 + "x:3": -940, + "y:3": 128 }, - "50:10": { + "51:10": { "id:3": 779, "sizeX:3": 36, "sizeY:3": 36, "x:3": -588, "y:3": 402 }, - "51:10": { + "52:10": { "id:3": 787, "sizeX:3": 24, "sizeY:3": 24, "x:3": -560, "y:3": 160 }, - "52:10": { + "53:10": { "id:3": 788, "sizeX:3": 36, "sizeY:3": 36, "x:3": -540, "y:3": 402 }, - "53:10": { + "54:10": { "id:3": 789, "sizeX:3": 36, "sizeY:3": 36, "x:3": -540, "y:3": 354 }, - "54:10": { + "55:10": { "id:3": 805, "sizeX:3": 24, "sizeY:3": 24, "x:3": -604, "y:3": 232 }, - "55:10": { + "56:10": { "id:3": 814, "sizeX:3": 24, "sizeY:3": 24, "x:3": -692, "y:3": 80 }, - "56:10": { + "57:10": { "id:3": 815, "sizeX:3": 24, "sizeY:3": 24, "x:3": -940, "y:3": 184 }, - "57:10": { + "58:10": { "id:3": 819, "sizeX:3": 36, "sizeY:3": 36, "x:3": -492, "y:3": 402 }, - "58:10": { + "59:10": { "id:3": 890, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 306 }, - "59:10": { + "60:10": { "id:3": 893, "sizeX:3": 36, "sizeY:3": 36, "x:3": -492, "y:3": 306 }, - "60:10": { + "61:10": { "id:3": 903, "sizeX:3": 24, "sizeY:3": 24, "x:3": -736, "y:3": 304 }, - "61:10": { + "62:10": { "id:3": 919, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 258 }, - "62:10": { + "63:10": { "id:3": 926, "sizeX:3": 36, "sizeY:3": 36, "x:3": -444, "y:3": 400 }, - "63:10": { + "64:10": { "id:3": 933, "sizeX:3": 32, "sizeY:3": 32, "x:3": -840, "y:3": 272 + }, + "65:10": { + "id:3": 1046, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -588, + "y:3": 354 + }, + "66:10": { + "id:3": 1049, + "sizeX:3": 36, + "sizeY:3": 36, + "x:3": -492, + "y:3": 258 + }, + "67:10": { + "id:3": 1050, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -840, + "y:3": 184 + }, + "68:10": { + "id:3": 1051, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -792, + "y:3": 352 } } }, @@ -52162,711 +56185,711 @@ "y:3": -232 }, "13:10": { - "id:3": 55, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -48, - "y:3": -360 - }, - "14:10": { "id:3": 57, "sizeX:3": 24, "sizeY:3": 24, "x:3": 636, "y:3": -228 }, - "15:10": { + "14:10": { "id:3": 67, "sizeX:3": 24, "sizeY:3": 24, "x:3": 636, "y:3": -416 }, - "16:10": { + "15:10": { "id:3": 70, "sizeX:3": 24, "sizeY:3": 24, "x:3": -48, "y:3": -404 }, - "17:10": { + "16:10": { "id:3": 71, "sizeX:3": 32, "sizeY:3": 32, "x:3": 80, "y:3": -232 }, - "18:10": { + "17:10": { "id:3": 72, "sizeX:3": 32, "sizeY:3": 32, "x:3": -48, "y:3": -148 }, - "19:10": { + "18:10": { "id:3": 74, "sizeX:3": 24, "sizeY:3": 24, "x:3": 116, "y:3": -184 }, - "20:10": { + "19:10": { "id:3": 75, "sizeX:3": 24, "sizeY:3": 24, "x:3": 48, "y:3": -228 }, - "21:10": { + "20:10": { "id:3": 76, "sizeX:3": 32, "sizeY:3": 32, "x:3": 80, "y:3": -64 }, - "22:10": { + "21:10": { "id:3": 78, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -316 }, - "23:10": { + "22:10": { "id:3": 79, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -276 }, - "24:10": { + "23:10": { "id:3": 80, "sizeX:3": 24, "sizeY:3": 24, "x:3": 24, "y:3": -316 }, - "25:10": { + "24:10": { "id:3": 81, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -316 }, - "26:10": { + "25:10": { "id:3": 82, "sizeX:3": 24, "sizeY:3": 24, "x:3": 16, "y:3": -60 }, - "27:10": { + "26:10": { "id:3": 83, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -448 }, - "28:10": { + "27:10": { "id:3": 84, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -316 }, - "29:10": { + "28:10": { "id:3": 86, "sizeX:3": 48, "sizeY:3": 48, "x:3": 312, "y:3": -328 }, - "30:10": { + "29:10": { "id:3": 87, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -484 }, - "31:10": { + "30:10": { "id:3": 88, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -388 }, - "32:10": { + "31:10": { "id:3": 89, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -520 }, - "33:10": { + "32:10": { "id:3": 90, "sizeX:3": 48, "sizeY:3": 48, "x:3": 524, "y:3": -532 }, - "34:10": { + "33:10": { "id:3": 91, "sizeX:3": 32, "sizeY:3": 32, "x:3": 132, "y:3": -232 }, - "35:10": { + "34:10": { "id:3": 92, "sizeX:3": 24, "sizeY:3": 24, "x:3": 116, "y:3": -104 }, - "36:10": { + "35:10": { "id:3": 93, - "sizeX:3": 48, - "sizeY:3": 48, - "x:3": 392, - "y:3": -240 + "sizeX:3": 40, + "sizeY:3": 40, + "x:3": 440, + "y:3": -236 }, - "37:10": { + "36:10": { "id:3": 94, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -228 }, - "38:10": { + "37:10": { "id:3": 95, "sizeX:3": 40, "sizeY:3": 40, "x:3": 276, "y:3": -236 }, - "39:10": { + "38:10": { "id:3": 96, "sizeX:3": 24, "sizeY:3": 24, "x:3": 492, "y:3": -228 }, - "40:10": { + "39:10": { "id:3": 98, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 356, + "x:3": 360, "y:3": -232 }, - "41:10": { + "40:10": { "id:3": 104, "sizeX:3": 40, "sizeY:3": 40, - "x:3": 440, - "y:3": -292 + "x:3": 484, + "y:3": -188 }, - "42:10": { + "41:10": { "id:3": 107, "sizeX:3": 24, "sizeY:3": 24, "x:3": 156, "y:3": -184 }, - "43:10": { + "42:10": { "id:3": 112, "sizeX:3": 24, "sizeY:3": 24, "x:3": 156, "y:3": -144 }, - "44:10": { + "43:10": { "id:3": 126, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 448, - "y:3": -228 + "x:3": 364, + "y:3": -276 }, - "45:10": { + "44:10": { "id:3": 129, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -448 }, - "46:10": { + "45:10": { "id:3": 130, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -556 }, - "47:10": { + "46:10": { "id:3": 131, "sizeX:3": 24, "sizeY:3": 24, "x:3": 536, "y:3": -228 }, - "48:10": { + "47:10": { "id:3": 132, "sizeX:3": 24, "sizeY:3": 24, "x:3": 696, "y:3": -372 }, - "49:10": { + "48:10": { "id:3": 133, "sizeX:3": 32, "sizeY:3": 32, "x:3": 532, "y:3": -452 }, - "50:10": { + "49:10": { "id:3": 134, "sizeX:3": 24, "sizeY:3": 24, "x:3": 536, "y:3": -284 }, - "51:10": { + "50:10": { "id:3": 135, "sizeX:3": 40, "sizeY:3": 40, "x:3": 528, "y:3": -380 }, - "52:10": { + "51:10": { "id:3": 154, "sizeX:3": 40, "sizeY:3": 40, "x:3": 736, "y:3": -380 }, - "53:10": { + "52:10": { "id:3": 156, "sizeX:3": 24, "sizeY:3": 24, "x:3": 136, "y:3": -316 }, - "54:10": { + "53:10": { "id:3": 157, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -316 }, - "55:10": { + "54:10": { "id:3": 164, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -228 }, - "56:10": { + "55:10": { "id:3": 165, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -184 }, - "57:10": { + "56:10": { "id:3": 168, "sizeX:3": 24, "sizeY:3": 24, "x:3": 244, "y:3": -276 }, - "58:10": { + "57:10": { "id:3": 184, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -184 }, - "59:10": { + "58:10": { "id:3": 187, "sizeX:3": 32, "sizeY:3": 32, "x:3": -88, "y:3": -408 }, - "60:10": { + "59:10": { "id:3": 203, "sizeX:3": 24, "sizeY:3": 24, "x:3": 576, "y:3": -372 }, - "61:10": { + "60:10": { "id:3": 213, "sizeX:3": 24, "sizeY:3": 24, "x:3": 620, "y:3": -336 }, - "62:10": { + "61:10": { "id:3": 227, "sizeX:3": 24, "sizeY:3": 24, "x:3": 24, "y:3": -388 }, - "63:10": { + "62:10": { "id:3": 233, "sizeX:3": 32, "sizeY:3": 32, "x:3": 112, "y:3": -148 }, - "64:10": { + "63:10": { "id:3": 236, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 324, - "y:3": -228 + "x:3": 284, + "y:3": -484 }, - "65:10": { + "64:10": { "id:3": 237, "sizeX:3": 24, "sizeY:3": 24, "x:3": 156, "y:3": -104 }, - "66:10": { + "65:10": { "id:3": 319, "sizeX:3": 32, "sizeY:3": 32, "x:3": 176, "y:3": -392 }, - "67:10": { + "66:10": { "id:3": 338, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 404, - "y:3": -284 + "x:3": 476, + "y:3": -276 }, - "68:10": { + "67:10": { "id:3": 398, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 364, - "y:3": -488 + "x:3": 360, + "y:3": -560 }, - "69:10": { + "68:10": { "id:3": 400, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, - "y:3": -484 + "x:3": 284, + "y:3": -556 }, - "70:10": { + "69:10": { "id:3": 502, "sizeX:3": 24, "sizeY:3": 24, "x:3": 492, "y:3": -448 }, - "71:10": { + "70:10": { "id:3": 504, "sizeX:3": 24, "sizeY:3": 24, "x:3": 284, "y:3": -104 }, - "72:10": { + "71:10": { "id:3": 505, "sizeX:3": 24, "sizeY:3": 24, "x:3": 284, "y:3": -144 }, - "73:10": { + "72:10": { "id:3": 507, "sizeX:3": 24, "sizeY:3": 24, "x:3": 536, "y:3": -180 }, - "74:10": { + "73:10": { "id:3": 509, "sizeX:3": 32, "sizeY:3": 32, "x:3": -52, "y:3": -64 }, - "75:10": { + "74:10": { "id:3": 540, "sizeX:3": 24, "sizeY:3": 24, "x:3": 84, "y:3": -4 }, - "76:10": { + "75:10": { "id:3": 541, "sizeX:3": 32, "sizeY:3": 32, "x:3": 220, "y:3": -392 }, - "77:10": { + "76:10": { "id:3": 546, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -144 }, - "78:10": { + "77:10": { "id:3": 549, "sizeX:3": 24, "sizeY:3": 24, "x:3": 172, "y:3": -276 }, - "79:10": { + "78:10": { "id:3": 609, "sizeX:3": 32, "sizeY:3": 32, "x:3": 132, "y:3": -392 }, - "80:10": { + "79:10": { "id:3": 727, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -360 }, - "81:10": { + "80:10": { "id:3": 728, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -420 }, - "82:10": { + "81:10": { "id:3": 730, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -388 }, - "83:10": { + "82:10": { "id:3": 731, "sizeX:3": 24, "sizeY:3": 24, "x:3": 64, "y:3": -356 }, - "84:10": { + "83:10": { "id:3": 747, "sizeX:3": 24, "sizeY:3": 24, "x:3": 16, "y:3": -228 }, - "85:10": { + "84:10": { "id:3": 790, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -124 }, - "86:10": { + "85:10": { "id:3": 801, "sizeX:3": 24, "sizeY:3": 24, "x:3": 744, "y:3": -336 }, - "87:10": { + "86:10": { "id:3": 810, "sizeX:3": 24, "sizeY:3": 24, "x:3": 208, "y:3": -276 }, - "88:10": { + "87:10": { "id:3": 812, "sizeX:3": 0, "sizeY:3": 0, "x:3": 296, "y:3": -216 }, - "89:10": { + "88:10": { "id:3": 816, "sizeX:3": 48, "sizeY:3": 48, "x:3": 312, "y:3": -72 }, - "90:10": { + "89:10": { "id:3": 818, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 276, - "y:3": -20 + "x:3": 364, + "y:3": -104 }, - "91:10": { + "90:10": { "id:3": 820, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -164 }, - "92:10": { + "91:10": { "id:3": 821, "sizeX:3": 24, "sizeY:3": 24, "x:3": 16, "y:3": -4 }, - "93:10": { + "92:10": { "id:3": 822, "sizeX:3": 24, "sizeY:3": 24, "x:3": 48, "y:3": -60 }, - "94:10": { + "93:10": { "id:3": 823, "sizeX:3": 24, "sizeY:3": 24, "x:3": -12, "y:3": -404 }, - "95:10": { + "94:10": { "id:3": 824, "sizeX:3": 24, "sizeY:3": 24, "x:3": 576, "y:3": -228 }, - "96:10": { + "95:10": { "id:3": 830, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 444, - "y:3": -184 + "x:3": 404, + "y:3": -392 }, - "97:10": { + "96:10": { "id:3": 831, "sizeX:3": 24, "sizeY:3": 24, "x:3": 448, - "y:3": -136 + "y:3": -388 }, - "98:10": { + "97:10": { "id:3": 832, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 492, - "y:3": -136 + "x:3": 364, + "y:3": -388 }, - "99:10": { + "98:10": { "id:3": 833, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 404, - "y:3": -136 + "x:3": 448, + "y:3": -356 }, - "100:10": { + "99:10": { "id:3": 834, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 492, + "x:3": 448, "y:3": -180 }, - "101:10": { + "100:10": { "id:3": 835, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 360, - "y:3": -268 + "x:3": 448, + "y:3": -276 }, - "102:10": { + "101:10": { "id:3": 836, "sizeX:3": 24, "sizeY:3": 24, "x:3": 100, "y:3": -276 }, - "103:10": { + "102:10": { "id:3": 837, "sizeX:3": 24, "sizeY:3": 24, "x:3": 136, "y:3": -276 }, - "104:10": { + "103:10": { "id:3": 886, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -520 }, - "105:10": { + "104:10": { "id:3": 887, "sizeX:3": 24, "sizeY:3": 24, "x:3": 284, "y:3": -184 }, - "106:10": { + "105:10": { "id:3": 894, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -448 }, - "107:10": { + "106:10": { "id:3": 895, "sizeX:3": 24, "sizeY:3": 24, "x:3": 324, "y:3": -388 }, - "108:10": { + "107:10": { "id:3": 896, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 360, - "y:3": -180 + "x:3": 408, + "y:3": -196 }, - "109:10": { + "108:10": { "id:3": 897, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 404, - "y:3": -180 + "x:3": 408, + "y:3": -228 }, - "110:10": { + "109:10": { "id:3": 929, "sizeX:3": 32, "sizeY:3": 32, - "x:3": 272, - "y:3": 20 + "x:3": 360, + "y:3": -168 }, - "111:10": { + "110:10": { "id:3": 936, "sizeX:3": 24, "sizeY:3": 24, "x:3": 696, "y:3": -420 }, - "112:10": { + "111:10": { "id:3": 1040, "sizeX:3": 24, "sizeY:3": 24, "x:3": 136, "y:3": -356 }, - "113:10": { + "112:10": { "id:3": 1041, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 280, + "x:3": 284, "y:3": -276 + }, + "113:10": { + "id:3": 1052, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -48, + "y:3": -360 } } }, @@ -52915,14 +56938,14 @@ "sizeX:3": 48, "sizeY:3": 48, "x:3": -564, - "y:3": 216 + "y:3": 124 }, "4:10": { "id:3": 68, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 312 + "x:3": -424, + "y:3": 152 }, "5:10": { "id:3": 132, @@ -52936,7 +56959,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -228, - "y:3": 132 + "y:3": 136 }, "7:10": { "id:3": 144, @@ -52947,16 +56970,16 @@ }, "8:10": { "id:3": 148, - "sizeX:3": 36, - "sizeY:3": 36, - "x:3": -762, - "y:3": 102 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -724, + "y:3": 104 }, "9:10": { "id:3": 149, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -720, "y:3": 72 }, "10:10": { @@ -52970,14 +56993,14 @@ "id:3": 151, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -720, "y:3": -48 }, "12:10": { "id:3": 152, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -756, + "x:3": -720, "y:3": 0 }, "13:10": { @@ -53005,14 +57028,14 @@ "id:3": 158, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -512, + "x:3": -516, "y:3": 72 }, "17:10": { "id:3": 159, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, + "x:3": -468, "y:3": 72 }, "18:10": { @@ -53117,22 +57140,22 @@ "id:3": 176, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -306, - "y:3": -48 + "x:3": -360, + "y:3": 52 }, "33:10": { "id:3": 177, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -258, - "y:3": -48 + "x:3": -360, + "y:3": 108 }, "34:10": { "id:3": 178, "sizeX:3": 24, "sizeY:3": 24, "x:3": -204, - "y:3": 24 + "y:3": 108 }, "35:10": { "id:3": 179, @@ -53171,24 +57194,24 @@ }, "40:10": { "id:3": 185, - "sizeX:3": 48, - "sizeY:3": 48, - "x:3": -420, - "y:3": 96 + "sizeX:3": 40, + "sizeY:3": 40, + "x:3": -608, + "y:3": 100 }, "41:10": { "id:3": 186, "sizeX:3": 24, "sizeY:3": 24, "x:3": -684, - "y:3": 276 + "y:3": 280 }, "42:10": { "id:3": 188, "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, - "y:3": 108 + "y:3": 204 }, "43:10": { "id:3": 190, @@ -53215,15 +57238,15 @@ "id:3": 197, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 204 + "x:3": -360, + "y:3": 252 }, "47:10": { "id:3": 198, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -420, - "y:3": 240 + "x:3": -424, + "y:3": 252 }, "48:10": { "id:3": 199, @@ -53236,8 +57259,8 @@ "id:3": 201, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 144 + "x:3": -468, + "y:3": 204 }, "50:10": { "id:3": 234, @@ -53265,42 +57288,42 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -552, - "y:3": 180 + "y:3": 176 }, "54:10": { "id:3": 248, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -774, - "y:3": 246 + "x:3": -792, + "y:3": 244 }, "55:10": { "id:3": 249, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -792, - "y:3": 276 + "x:3": -828, + "y:3": 272 }, "56:10": { "id:3": 250, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -810, - "y:3": 246 + "x:3": -828, + "y:3": 244 }, "57:10": { "id:3": 255, "sizeX:3": 24, "sizeY:3": 24, "x:3": -552, - "y:3": 144 + "y:3": 204 }, "58:10": { "id:3": 261, "sizeX:3": 24, "sizeY:3": 24, "x:3": -288, - "y:3": 276 + "y:3": 288 }, "59:10": { "id:3": 267, @@ -53418,7 +57441,7 @@ "id:3": 311, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -288, + "x:3": -324, "y:3": 204 }, "76:10": { @@ -53426,13 +57449,13 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 240 + "y:3": 252 }, "77:10": { "id:3": 318, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -330, + "x:3": -424, "y:3": 108 }, "78:10": { @@ -53440,35 +57463,35 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -156, - "y:3": 132 + "y:3": 136 }, "79:10": { "id:3": 339, "sizeX:3": 24, "sizeY:3": 24, "x:3": -720, - "y:3": 156 + "y:3": 344 }, "80:10": { "id:3": 340, "sizeX:3": 24, "sizeY:3": 24, "x:3": -756, - "y:3": 156 + "y:3": 308 }, "81:10": { "id:3": 341, - "sizeX:3": 20, - "sizeY:3": 20, - "x:3": -388, - "y:3": 260 + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -456, + "y:3": 252 }, "82:10": { "id:3": 344, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -522, - "y:3": 168 + "x:3": -528, + "y:3": 232 }, "83:10": { "id:3": 347, @@ -53510,28 +57533,28 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, - "y:3": 240 + "y:3": 280 }, "89:10": { "id:3": 512, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 240 + "x:3": -360, + "y:3": 152 }, "90:10": { "id:3": 526, "sizeX:3": 48, "sizeY:3": 48, "x:3": -648, - "y:3": 144 + "y:3": 268 }, "91:10": { "id:3": 527, "sizeX:3": 24, "sizeY:3": 24, "x:3": -288, - "y:3": 240 + "y:3": 252 }, "92:10": { "id:3": 532, @@ -53544,22 +57567,22 @@ "id:3": 542, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 240 + "x:3": -360, + "y:3": 184 }, "94:10": { "id:3": 549, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -528, - "y:3": 414 + "x:3": -680, + "y:3": 420 }, "95:10": { "id:3": 551, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -504, - "y:3": 198 + "x:3": -528, + "y:3": 296 }, "96:10": { "id:3": 555, @@ -53572,8 +57595,8 @@ "id:3": 580, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -468, - "y:3": 414 + "x:3": -620, + "y:3": 420 }, "98:10": { "id:3": 611, @@ -53663,22 +57686,22 @@ "id:3": 690, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -420, - "y:3": 276 + "x:3": -424, + "y:3": 344 }, "111:10": { "id:3": 693, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -492, - "y:3": 276 + "x:3": -392, + "y:3": 184 }, "112:10": { "id:3": 694, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -528, - "y:3": 276 + "x:3": -392, + "y:3": 152 }, "113:10": { "id:3": 732, @@ -53692,7 +57715,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -252, - "y:3": 240 + "y:3": 252 }, "115:10": { "id:3": 746, @@ -53726,15 +57749,15 @@ "id:3": 783, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -348, - "y:3": 414 + "x:3": -500, + "y:3": 420 }, "120:10": { "id:3": 785, - "sizeX:3": 22, - "sizeY:3": 22, - "x:3": -390, - "y:3": 222 + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -424, + "y:3": 224 }, "121:10": { "id:3": 798, @@ -53748,7 +57771,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -252, - "y:3": 276 + "y:3": 288 }, "123:10": { "id:3": 800, @@ -53787,17 +57810,17 @@ }, "128:10": { "id:3": 827, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": -258, - "y:3": -79 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -328, + "y:3": 132 }, "129:10": { "id:3": 828, "sizeX:3": 32, "sizeY:3": 32, "x:3": -364, - "y:3": 236 + "y:3": 284 }, "130:10": { "id:3": 835, @@ -53811,35 +57834,35 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -600, - "y:3": 156 + "y:3": 320 }, "132:10": { "id:3": 841, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 312 + "y:3": 344 }, "133:10": { "id:3": 849, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -360, - "y:3": 276 + "x:3": -392, + "y:3": 344 }, "134:10": { "id:3": 850, "sizeX:3": 32, "sizeY:3": 32, "x:3": -364, - "y:3": 308 + "y:3": 340 }, "135:10": { "id:3": 851, "sizeX:3": 24, "sizeY:3": 24, "x:3": -324, - "y:3": 276 + "y:3": 288 }, "136:10": { "id:3": 852, @@ -53852,22 +57875,22 @@ "id:3": 857, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -720, - "y:3": 342 + "x:3": -648, + "y:3": 344 }, "138:10": { "id:3": 858, - "sizeX:3": 36, - "sizeY:3": 36, - "x:3": -558, - "y:3": 336 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -556, + "y:3": 340 }, "139:10": { "id:3": 859, - "sizeX:3": 72, - "sizeY:3": 72, - "x:3": -444, - "y:3": 318 + "sizeX:3": 48, + "sizeY:3": 48, + "x:3": -496, + "y:3": 332 }, "140:10": { "id:3": 888, @@ -53880,8 +57903,8 @@ "id:3": 892, "sizeX:3": 48, "sizeY:3": 48, - "x:3": -408, - "y:3": 414 + "x:3": -560, + "y:3": 420 }, "142:10": { "id:3": 899, @@ -53901,8 +57924,8 @@ "id:3": 912, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -486, - "y:3": 168 + "x:3": -528, + "y:3": 264 }, "145:10": { "id:3": 921, @@ -53915,8 +57938,36 @@ "id:3": 934, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -456, - "y:3": 276 + "x:3": -424, + "y:3": 184 + }, + "147:10": { + "id:3": 1032, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -684, + "y:3": 380 + }, + "148:10": { + "id:3": 1033, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -720, + "y:3": 380 + }, + "149:10": { + "id:3": 1045, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -756, + "y:3": 380 + }, + "150:10": { + "id:3": 1047, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": -756, + "y:3": 344 } } }, @@ -55399,14 +59450,14 @@ "id:3": 840, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -168, + "x:3": -172, "y:3": 0 }, "106:10": { "id:3": 841, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -168, + "x:3": -172, "y:3": -48 }, "107:10": { @@ -55442,7 +59493,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -60, - "y:3": 264 + "y:3": 220 }, "112:10": { "id:3": 847, @@ -56997,6 +61048,13 @@ "sizeY:3": 24, "x:3": 72, "y:3": 192 + }, + "65:10": { + "id:3": 1048, + "sizeX:3": 24, + "sizeY:3": 24, + "x:3": 36, + "y:3": -4 } } }, @@ -57665,7 +61723,7 @@ "betterquesting:10": { "bg_image:8": "", "bg_size:3": 256, - "desc:8": "Convert between matter and energy with §bApplied Energistics§r§r.\n\nAutomate ALL the things! o/", + "desc:8": "Convert between matter and energy with §bApplied Energistics§r.\n\nAutomate ALL the things! o/", "icon:10": { "Count:3": 1, "Damage:2": 2, @@ -57682,7 +61740,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -100, - "y:3": 366 + "y:3": 368 }, "1:10": { "id:3": 1, @@ -57714,10 +61772,10 @@ }, "5:10": { "id:3": 64, - "sizeX:3": 36, - "sizeY:3": 36, + "sizeX:3": 32, + "sizeY:3": 32, "x:3": 12, - "y:3": 360 + "y:3": 364 }, "6:10": { "id:3": 73, @@ -57829,49 +61887,49 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 144, - "y:3": 312 + "y:3": 368 }, "22:10": { "id:3": 119, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 96, - "y:3": 312 + "x:3": 186, + "y:3": 368 }, "23:10": { "id:3": 120, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 48, - "y:3": 312 + "x:3": 228, + "y:3": 368 }, "24:10": { "id:3": 122, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 228, - "y:3": 516 + "x:3": 260, + "y:3": 480 }, "25:10": { "id:3": 123, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 228, - "y:3": 552 + "x:3": 260, + "y:3": 516 }, "26:10": { "id:3": 124, "sizeX:3": 24, "sizeY:3": 24, - "x:3": 228, - "y:3": 588 + "x:3": 260, + "y:3": 552 }, "27:10": { "id:3": 132, "sizeX:3": 24, "sizeY:3": 24, "x:3": 228, - "y:3": 312 + "y:3": 678 }, "28:10": { "id:3": 140, @@ -57885,7 +61943,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -48, - "y:3": 366 + "y:3": 368 }, "30:10": { "id:3": 237, @@ -57913,14 +61971,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 144, - "y:3": 726 + "y:3": 728 }, "34:10": { "id:3": 406, "sizeX:3": 24, "sizeY:3": 24, "x:3": 60, - "y:3": 726 + "y:3": 728 }, "35:10": { "id:3": 408, @@ -57968,8 +62026,8 @@ "id:3": 811, "sizeX:3": 24, "sizeY:3": 24, - "x:3": -48, - "y:3": 678 + "x:3": 4, + "y:3": 652 }, "42:10": { "id:3": 829, @@ -57997,14 +62055,14 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": -48, - "y:3": 312 + "y:3": 678 }, "46:10": { "id:3": 918, - "sizeX:3": 24, - "sizeY:3": 24, - "x:3": 0, - "y:3": 312 + "sizeX:3": 32, + "sizeY:3": 32, + "x:3": -52, + "y:3": 724 }, "47:10": { "id:3": 924, @@ -58032,7 +62090,7 @@ "sizeX:3": 24, "sizeY:3": 24, "x:3": 186, - "y:3": 726 + "y:3": 728 }, "51:10": { "id:3": 1032, diff --git a/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_1.jpg b/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_1.jpg new file mode 100644 index 0000000..6d656be Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_1.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_1.png b/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_1.png deleted file mode 100644 index f89e72e..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_1.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_2.jpg b/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_2.jpg new file mode 100644 index 0000000..2043b77 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_2.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_2.png b/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_2.png deleted file mode 100644 index 4ba2ffb..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/besoiobiy_2.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/cactus_cool.jpg b/overrides/resources/minecraft/textures/gui/title/background/cactus_cool.jpg new file mode 100644 index 0000000..9266291 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/cactus_cool.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/cactus_cool.png b/overrides/resources/minecraft/textures/gui/title/background/cactus_cool.png deleted file mode 100644 index 6032493..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/cactus_cool.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/cobracreeper1.jpg b/overrides/resources/minecraft/textures/gui/title/background/cobracreeper1.jpg new file mode 100644 index 0000000..df0e160 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/cobracreeper1.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/cobracreeper1.png b/overrides/resources/minecraft/textures/gui/title/background/cobracreeper1.png deleted file mode 100644 index 8e8aef1..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/cobracreeper1.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/darkarkangel.jpg b/overrides/resources/minecraft/textures/gui/title/background/darkarkangel.jpg new file mode 100644 index 0000000..277a349 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/darkarkangel.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/darkarkangel.png b/overrides/resources/minecraft/textures/gui/title/background/darkarkangel.png deleted file mode 100644 index 7a7b379..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/darkarkangel.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/ely_1.jpg b/overrides/resources/minecraft/textures/gui/title/background/ely_1.jpg new file mode 100644 index 0000000..7790be5 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/ely_1.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/ely_1.png b/overrides/resources/minecraft/textures/gui/title/background/ely_1.png deleted file mode 100644 index 4300ad4..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/ely_1.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/ely_2.jpg b/overrides/resources/minecraft/textures/gui/title/background/ely_2.jpg new file mode 100644 index 0000000..8b2e504 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/ely_2.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/ely_2.png b/overrides/resources/minecraft/textures/gui/title/background/ely_2.png deleted file mode 100644 index 3933452..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/ely_2.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/ely_3.jpg b/overrides/resources/minecraft/textures/gui/title/background/ely_3.jpg new file mode 100644 index 0000000..8a6e294 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/ely_3.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/ely_3.png b/overrides/resources/minecraft/textures/gui/title/background/ely_3.png deleted file mode 100644 index caf9129..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/ely_3.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/emiuna.jpg b/overrides/resources/minecraft/textures/gui/title/background/emiuna.jpg new file mode 100644 index 0000000..4a6bca3 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/emiuna.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/emiuna.png b/overrides/resources/minecraft/textures/gui/title/background/emiuna.png deleted file mode 100644 index 27dd080..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/emiuna.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_1.jpg b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_1.jpg new file mode 100644 index 0000000..5eef85d Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_1.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_1.png b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_1.png deleted file mode 100644 index 82fce6b..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_1.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_2.jpg b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_2.jpg new file mode 100644 index 0000000..e3c0ae0 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_2.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_2.png b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_2.png deleted file mode 100644 index e421a56..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_2.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_3.jpg b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_3.jpg new file mode 100644 index 0000000..315696e Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_3.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_3.png b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_3.png deleted file mode 100644 index 0a63ad6..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_3.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_4.jpg b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_4.jpg new file mode 100644 index 0000000..1c7b66d Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_4.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_4.png b/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_4.png deleted file mode 100644 index b763666..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/extracoolcat_4.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/gaboggamer.jpg b/overrides/resources/minecraft/textures/gui/title/background/gaboggamer.jpg new file mode 100644 index 0000000..006f5d4 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/gaboggamer.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/gaboggamer.png b/overrides/resources/minecraft/textures/gui/title/background/gaboggamer.png deleted file mode 100644 index 134fc2d..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/gaboggamer.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/itstheguywhoasked.jpg b/overrides/resources/minecraft/textures/gui/title/background/itstheguywhoasked.jpg new file mode 100644 index 0000000..25710a3 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/itstheguywhoasked.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/itstheguywhoasked.png b/overrides/resources/minecraft/textures/gui/title/background/itstheguywhoasked.png deleted file mode 100644 index d0c61ca..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/itstheguywhoasked.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/lyeo.jpg b/overrides/resources/minecraft/textures/gui/title/background/lyeo.jpg new file mode 100644 index 0000000..ca16aa3 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/lyeo.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/lyeo.png b/overrides/resources/minecraft/textures/gui/title/background/lyeo.png deleted file mode 100644 index 0b367fb..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/lyeo.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/pgs_1.jpg b/overrides/resources/minecraft/textures/gui/title/background/pgs_1.jpg new file mode 100644 index 0000000..8eef834 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/pgs_1.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/pgs_1.png b/overrides/resources/minecraft/textures/gui/title/background/pgs_1.png deleted file mode 100644 index 2669f61..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/pgs_1.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/pgs_2.jpg b/overrides/resources/minecraft/textures/gui/title/background/pgs_2.jpg new file mode 100644 index 0000000..db3ebd2 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/pgs_2.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/pgs_2.png b/overrides/resources/minecraft/textures/gui/title/background/pgs_2.png deleted file mode 100644 index 1f6fba1..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/pgs_2.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/qr_est.jpg b/overrides/resources/minecraft/textures/gui/title/background/qr_est.jpg new file mode 100644 index 0000000..b8362fa Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/qr_est.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/qr_est.png b/overrides/resources/minecraft/textures/gui/title/background/qr_est.png deleted file mode 100644 index d56539d..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/qr_est.png and /dev/null differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/supasem.jpg b/overrides/resources/minecraft/textures/gui/title/background/supasem.jpg new file mode 100644 index 0000000..09e6477 Binary files /dev/null and b/overrides/resources/minecraft/textures/gui/title/background/supasem.jpg differ diff --git a/overrides/resources/minecraft/textures/gui/title/background/supasem.png b/overrides/resources/minecraft/textures/gui/title/background/supasem.png deleted file mode 100644 index f72131d..0000000 Binary files a/overrides/resources/minecraft/textures/gui/title/background/supasem.png and /dev/null differ diff --git a/overrides/scripts/_oreDict.zs b/overrides/scripts/_oreDict.zs index fde583f..159217a 100644 --- a/overrides/scripts/_oreDict.zs +++ b/overrides/scripts/_oreDict.zs @@ -2652,6 +2652,19 @@ recipes.addShapeless(, []); .add(); .add(); +.add(); +.add(); + +.add(); +.add(); +.add(); + +.add(); +.add(); +.add(); +.add(); +.add(); + // Add All GT Super and Quantum Tanks (apart from creative) // Super Tanks .add(); diff --git a/tools/.eslintrc.js b/tools/.eslintrc.cjs similarity index 77% rename from tools/.eslintrc.js rename to tools/.eslintrc.cjs index 313a9a7..5287f80 100644 --- a/tools/.eslintrc.js +++ b/tools/.eslintrc.cjs @@ -8,7 +8,10 @@ module.exports = { }, }, plugins: ["@typescript-eslint"], - extends: ["plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"], + extends: [ + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended", + ], rules: { quotes: [2, "double", { avoidEscape: true }], semi: [2, "always"], diff --git a/tools/.prettierrc.cjs b/tools/.prettierrc.cjs new file mode 100644 index 0000000..f496d1d --- /dev/null +++ b/tools/.prettierrc.cjs @@ -0,0 +1,7 @@ +module.exports = { + semi: true, + trailingComma: "all", + printWidth: 80, + useTabs: true, + alignObjectProperties: true, +}; diff --git a/tools/.prettierrc.js b/tools/.prettierrc.js deleted file mode 100644 index cf4d455..0000000 --- a/tools/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", - printWidth: 120, - useTabs: true, - alignObjectProperties: true -}; \ No newline at end of file diff --git a/tools/buildConfig.ts b/tools/buildConfig.ts index d976d97..0ee5b96 100644 --- a/tools/buildConfig.ts +++ b/tools/buildConfig.ts @@ -1,8 +1,11 @@ -import buildConfig from "./util/buildConfig.default.json"; +import buildConfig from "#utils/buildConfig.default.json" assert { type: "json" }; import fs from "fs"; if (fs.existsSync("./config.json")) { - Object.assign(buildConfig, JSON.parse(fs.readFileSync("./config.json").toString())); + Object.assign( + buildConfig, + JSON.parse(fs.readFileSync("./config.json").toString()), + ); } export default buildConfig; diff --git a/tools/config.json b/tools/config.json index d6b0995..6012833 100644 --- a/tools/config.json +++ b/tools/config.json @@ -1,8 +1,5 @@ { - "copyFromSharedServerGlobs": [ - "overrides/**/*", - "!overrides/resources/**/*" - ], + "copyFromSharedServerGlobs": ["overrides/**/*", "!overrides/resources/**/*"], "copyFromSharedClientGlobs": [ "overrides/**/*", "!overrides/resources/minecraft/textures/gui/title/background/*" diff --git a/tools/globals.ts b/tools/globals.ts index 641f6f4..936a04a 100644 --- a/tools/globals.ts +++ b/tools/globals.ts @@ -1,21 +1,46 @@ -import buildConfig from "./buildConfig"; +import buildConfig from "#buildConfig"; import upath from "upath"; -import manifest from "./../manifest.json"; -import { ModpackManifest } from "./types/modpackManifest"; +import manifest from "./../manifest.json" assert { type: "json" }; +import { ModpackManifest } from "#types/modpackManifest.ts"; -export const sharedDestDirectory = upath.join(buildConfig.buildDestinationDirectory, "shared"); -export const modDestDirectory = upath.join(buildConfig.buildDestinationDirectory, "mods"); -export const clientDestDirectory = upath.join(buildConfig.buildDestinationDirectory, "client"); -export const mmcDestDirectory = upath.join(buildConfig.buildDestinationDirectory, "mmc"); -export const serverDestDirectory = upath.join(buildConfig.buildDestinationDirectory, "server"); -export const langDestDirectory = upath.join(buildConfig.buildDestinationDirectory, "lang"); -export const tempDirectory = upath.join(buildConfig.buildDestinationDirectory, "temp"); +export const sharedDestDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "shared", +); +export const modDestDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "mods", +); +export const clientDestDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "client", +); +export const mmcDestDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "mmc", +); +export const serverDestDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "server", +); +export const langDestDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "lang", +); +export const tempDirectory = upath.join( + buildConfig.buildDestinationDirectory, + "temp", +); export const modpackManifest = manifest as ModpackManifest; export const overridesFolder = modpackManifest.overrides || "overrides"; export const configFolder = upath.join(overridesFolder, "config"); -export const configOverridesFolder = upath.join(overridesFolder, "config-overrides"); +export const configOverridesFolder = upath.join( + overridesFolder, + "config-overrides", +); export const rootDirectory = ".."; export const templatesFolder = "templates"; +export const storageFolder = "storage"; // The Repository Owner (For Issues & PR Tags Transforms in Changelog) export const repoOwner = "Nomi-CEu"; diff --git a/tools/gulpfile.ts b/tools/gulpfile.ts index 3794a5d..03e7c50 100644 --- a/tools/gulpfile.ts +++ b/tools/gulpfile.ts @@ -1,55 +1,73 @@ // noinspection JSUnusedGlobalSymbols,UnnecessaryLocalVariableJS -import * as gulp from "gulp"; +import gulp from "gulp"; -import pruneCacheTask from "./tasks/misc/pruneCache"; +import pruneCacheTask from "./tasks/misc/pruneCache.ts"; export const pruneCache = pruneCacheTask; -import * as transformFiles from "./tasks/misc/transformFiles"; +import * as transformFiles from "./tasks/misc/transformFiles.ts"; export const updateFilesIssue = transformFiles.updateFilesIssue; export const updateFilesRandomPatches = transformFiles.updateFilesRandomPatches; export const updateFilesServer = transformFiles.updateFilesServer; export const updateFilesMainMenu = transformFiles.updateFilesMainMenu; export const updateFilesAll = transformFiles.updateAll; -import * as changelog from "./tasks/changelog/createChangelog"; +import * as changelog from "./tasks/changelog/index.ts"; export const createChangelog = changelog.createRootChangelog; -import sharedTasks from "./tasks/shared"; -import clientTasks from "./tasks/client"; -import serverTasks from "./tasks/server"; -import langTasks from "./tasks/lang"; -import mmcTasks from "./tasks/mmc"; -import modTasks from "./tasks/misc/downloadMods"; +import sharedTasks from "./tasks/shared/index.ts"; +import clientTasks from "./tasks/client/index.ts"; +import serverTasks from "./tasks/server/index.ts"; +import langTasks from "./tasks/lang/index.ts"; +import mmcTasks from "./tasks/mmc/index.ts"; +import modTasks from "./tasks/misc/downloadMods.ts"; -export const buildClient = gulp.series(sharedTasks, clientTasks); -export const buildServer = gulp.series(gulp.parallel(sharedTasks, modTasks), serverTasks); -export const buildLang = gulp.series(sharedTasks, langTasks); -export const buildMMC = gulp.series(gulp.parallel(sharedTasks, modTasks), clientTasks, mmcTasks); +export const buildClient = gulp.series( + sharedTasks, + clientTasks, + pruneCacheTask, +); +export const buildServer = gulp.series( + gulp.parallel(sharedTasks, modTasks), + serverTasks, + pruneCacheTask, +); +export const buildLang = gulp.series(sharedTasks, langTasks, pruneCacheTask); +export const buildMMC = gulp.series( + gulp.parallel(sharedTasks, modTasks), + clientTasks, + mmcTasks, + pruneCacheTask, +); export const buildAll = gulp.series( sharedTasks, gulp.parallel(clientTasks, langTasks, gulp.series(modTasks, serverTasks)), + pruneCacheTask, ); -import checkTasks from "./tasks/checks"; +import checkTasks from "./tasks/checks/index.ts"; export const check = gulp.series(checkTasks); -import * as zip from "./tasks/misc/zip"; +import * as zip from "./tasks/misc/zip.ts"; export const zipClient = zip.zipClient; export const zipServer = zip.zipServer; export const zipLang = zip.zipLang; export const zipMMC = zip.zipMMC; export const zipAll = zip.zipAll; -exports.default = gulp.series(buildAll, zipAll); +export default gulp.series(buildAll, zipAll); -import * as gha from "./tasks/misc/gha"; +import * as gha from "./tasks/misc/gha.ts"; export const makeArtifactNames = gha.makeArtifactNames; -export { deployCurseForge } from "./tasks/deploy/curseforge"; +export { deployCurseForge } from "./tasks/deploy/curseforge.ts"; -import deployReleasesTask from "./tasks/deploy/releases"; -export const deployReleases = deployReleasesTask; +import * as release from "./tasks/deploy/releases.ts"; +export const deployReleases = release.default; -import fireNightlyWebhookTask from "./tasks/misc/webhook"; -export const fireNightlyWebhook = fireNightlyWebhookTask; +import * as checkFix from "./tasks/helpers/questChecks/index.ts"; +export const checkQB = checkFix.check; +export const fixQB = checkFix.fix; + +import * as qbPort from "./tasks/helpers/questPorting/index.ts"; +export const portQBChanges = gulp.series(qbPort.default, fixQB); diff --git a/tools/package-lock.json b/tools/package-lock.json index cab3951..930551a 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -1,63 +1,77 @@ { "name": "nomi-ceu-build-tools", - "version": "1.2.2", - "lockfileVersion": 2, + "version": "2.0.0", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nomi-ceu-build-tools", - "version": "1.2.2", + "version": "2.0.0", "license": "LGPL-3.0", - "dependencies": { - "@actions/core": "^1.10.1", - "@egjs/list-differ": "^1.0.1", - "@types/json-stable-stringify-without-jsonify": "^1.0.1", - "dedent-js": "^1.0.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "toml-v1": "^1.0.0" - }, "devDependencies": { - "@octokit/rest": "^18.3.5", - "@types/bluebird": "^3.5.33", - "@types/fancy-log": "^1.3.1", - "@types/gulp": "^4.0.8", - "@types/gulp-imagemin": "^7.0.2", - "@types/gulp-rename": "^2.0.0", - "@types/gulp-zip": "^4.0.1", - "@types/md5": "^2.3.2", - "@types/merge-stream": "^1.1.2", - "@types/mustache": "^4.1.1", - "@types/requestretry": "^1.12.7", - "@types/sha1": "^1.1.2", - "@types/unzipper": "^0.10.3", - "@typescript-eslint/eslint-plugin": "^4.18.0", - "@typescript-eslint/parser": "^4.18.0", - "bluebird": "^3.7.2", - "del": "^6.0.0", + "@actions/core": "^1.10.1", + "@inquirer/confirm": "^3.1.6", + "@inquirer/prompts": "^5.0.2", + "@octokit/rest": "^20.1.1", + "@types/diff-match-patch": "^1.0.36", + "@types/fake-diff": "^1.0.3", + "@types/fancy-log": "^2.0.2", + "@types/gulp": "^4.0.17", + "@types/gulp-filter": "^3.0.39", + "@types/gulp-rename": "^2.0.6", + "@types/gulp-zip": "^4.0.4", + "@types/inquirer": "^9.0.7", + "@types/lodash": "^4.17.1", + "@types/md5": "^2.3.5", + "@types/merge-stream": "^1.1.5", + "@types/mustache": "^4.2.5", + "@types/picomatch": "^2.3.3", + "@types/sha1": "^1.1.5", + "@types/through2": "^2.0.41", + "@types/unzipper": "^0.10.9", + "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/parser": "^7.8.0", + "axios": "^1.6.8", + "axios-retry": "^4.1.0", + "case-switcher-js": "^1.1.10", + "colors": "^1.4.0", + "dedent-js": "^1.0.1", + "del": "^7.1.0", + "diff-match-patch": "^1.0.5", "discord-webhook-node": "^1.1.8", - "eslint": "^7.22.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-prettier": "^3.3.1", - "fancy-log": "^1.3.3", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "fake-diff": "^1.0.0", + "fancy-log": "^2.0.0", + "filesize": "^10.1.1", "gray-matter": "^4.0.3", - "gulp": "^4.0.2", - "gulp-imagemin": "^7.1.0", + "gulp": "^5.0.0", + "gulp-filter": "^9.0.1", "gulp-rename": "^2.0.0", - "gulp-zip": "^5.1.0", - "marked": "^9.0.3", + "gulp-zip": "^6.0.0", + "inquirer": "^9.2.20", + "javascript-stringify": "^2.1.0", + "just-diff": "^6.0.2", + "just-remove": "^3.2.0", + "lodash": "^4.17.21", + "marked": "^12.0.2", "md5": "^2.3.0", "merge-stream": "^2.0.0", - "mustache": "^4.1.0", - "png-to-jpeg": "^1.0.1", - "prettier": "^2.2.1", - "request": "^2.88.2", - "requestretry": "^5.0.0", + "mustache": "^4.2.0", + "picomatch": "^4.0.2", + "prettier": "^3.2.5", + "retry-axios": "^3.1.3", "sanitize-filename": "^1.6.3", "sha1": "^1.1.1", - "simple-git": "^3.19.1", - "ts-node": "^10.9.1", - "typescript": "^4.8.4", - "unzipper": "^0.10.11", + "simple-git": "^3.24.0", + "sort-keys": "^5.0.0", + "sort-keys-recursive": "^2.1.10", + "through2": "^4.0.2", + "toml-v1": "^1.0.0", + "ts-node": "^10.9.2", + "typescript": "5.4.5", + "unzipper": "^0.11.5", "upath": "^2.0.1" } }, @@ -65,131 +79,22 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", + "dev": true, "dependencies": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" } }, - "node_modules/@actions/core/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@actions/http-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", - "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz", + "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==", + "dev": true, "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -202,81 +107,357 @@ "node": ">=12" } }, - "node_modules/@egjs/list-differ": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@egjs/list-differ/-/list-differ-1.0.1.tgz", - "integrity": "sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==" + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { - "node": ">= 4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, "engines": { "node": ">=14" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, + "node_modules/@inquirer/checkbox": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.3.2.tgz", + "integrity": "sha512-lUXKA/5PhPBXz6SVDE+EbBmV3Wi3X77SPRet6Mc1pn6fSXAIivvu1OWpHDpVUxc+RiFflbrDjXUgLfCQeofrWg==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.1", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.6.tgz", + "integrity": "sha512-Mj4TU29g6Uy+37UtpA8UpEOI2icBfpCwSW1QDtfx60wRhUy90s/kHPif2OXSSvuwDQT1lhAYRWUfkNf9Tecxvg==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/type": "^1.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.1.0.tgz", + "integrity": "sha512-kfx0SU9nWgGe1f03ao/uXc85SFH1v2w3vQVH7QDGjKxdtJz+7vPitFtG++BTyJMYyYgH8MpXigutcXJeiQwVRw==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.6.tgz", + "integrity": "sha512-CWmp6XhfQye6xwH6/XV1HGvY95rUfzw7EXyNDHzj5s5Qr1t/X3t6c7uRkfK7OD91y+sbSy7aL6MJv2bbNrMoew==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/type": "^1.3.1", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.6.tgz", + "integrity": "sha512-mFW/vU6mSut0UjmvxPdLC81Sz+5b4t7sMZeF7RlHki1PJkZVZIQoT91MCvoJJN2S7lDqSAV/TxeYqF41RNkY2g==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/type": "^1.3.1", + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.1.tgz", + "integrity": "sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.1.6.tgz", + "integrity": "sha512-M8bUFOlcn/kQcVYskl4kkB6dYrHtymJJ1S4nSg/khXT3W3l71u2qhSzfo6PdBG3jUe6ILJZ0gUh4Kef2uJ5pxw==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/type": "^1.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.6.tgz", + "integrity": "sha512-fkiTIijBRxotoMw0/ljA2BaSsz6PlGoiav9QyAjBXCZoyFsYoItstDKvJXbWwS9NrN42fXYvXn1ljBpldnJaeA==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/type": "^1.3.1", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.0.2.tgz", + "integrity": "sha512-3OC7tyqa5E1I5Isnua9xfV8TO7y/n5jnNhGLAG8BLBtCu4jCftDewSdfjFJR0ld77trqjPP2udLxv0RbggJn9w==", + "dev": true, + "dependencies": { + "@inquirer/checkbox": "^2.3.2", + "@inquirer/confirm": "^3.1.6", + "@inquirer/editor": "^2.1.6", + "@inquirer/expand": "^2.1.6", + "@inquirer/input": "^2.1.6", + "@inquirer/password": "^2.1.6", + "@inquirer/rawlist": "^2.1.6", + "@inquirer/select": "^2.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.1.6.tgz", + "integrity": "sha512-xnGBfjatdUqyBMqHi1kHHBh4ggQGZz42vYH0kFdQDnOtx4Ouo7baqVZhBRuQfZTL8tAXuOYI9X6r6BXBl8cnqw==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/type": "^1.3.1", + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.3.2.tgz", + "integrity": "sha512-VzLHVpaobBpI3o/CWSG2sCDqrjHZEYAfT1bowbR8Q72fEi0WfBO3Fnh595QqBit9kQhI1uJbVHaaovg1I7eE7Q==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.1.0", + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.1", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.3.1.tgz", + "integrity": "sha512-Pe3PFccjPVJV1vtlfVvm9OnlbxqdnP5QcscFEFEnK5quChf1ufZtM0r8mR5ToWHMxZOh0s8o/qp9ANGRTo/DAw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -304,6 +485,18 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -340,151 +533,176 @@ } }, "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dev": true, "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", "dev": true, "dependencies": { - "@octokit/types": "^6.40.0" + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=2" + "@octokit/core": "5" } }, "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@octokit/core": ">=3" + "@octokit/core": "5" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", "dev": true, "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=3" + "@octokit/core": "^5" } }, "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dev": true, "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", + "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", "dev": true, "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.2.2" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@octokit/openapi-types": "^22.2.0" } }, - "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "optional": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true }, "node_modules/@tsconfig/node12": { @@ -500,21 +718,15 @@ "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, - "node_modules/@types/bluebird": { - "version": "3.5.37", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.37.tgz", - "integrity": "sha512-g2qEd+zkfkTEudA2SrMAeAvY7CrFqtbsLILm2dT2VIeKTqMqVzcdfURlvu6FU3srRgbmXN1Srm94pg34EIehww==", - "dev": true - }, - "node_modules/@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "node_modules/@types/diff-match-patch": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", + "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", "dev": true }, "node_modules/@types/expect": { @@ -523,61 +735,56 @@ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", "dev": true }, - "node_modules/@types/fancy-log": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.1.tgz", - "integrity": "sha512-31Dt9JaGfHretvwVxCBrCFL5iC9MQ3zOXpu+8C4qzW0cxc5rJJVGxB5c/vZ+wmeTk/JjPz/D0gv8BZ+Ip6iCqQ==", + "node_modules/@types/fake-diff": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/fake-diff/-/fake-diff-1.0.3.tgz", + "integrity": "sha512-1AyEJ+HOrvb9w8YBS9MEOTMwEM5BlEyDgATcB6v4ga5OReKwQkM4hjwYBD4OAZKdrwWbgjy45KLYYuouv+0TIg==", "dev": true }, - "node_modules/@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } + "node_modules/@types/fancy-log": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-2.0.2.tgz", + "integrity": "sha512-SXVJvqWjsl90VwBfp7w4iQ0iO+vxAjQImglcpwbV9GkqNoUD5/p9Wsgetl40F1WL7pzWFN/eZPTF1g5FZXJsIw==", + "dev": true }, "node_modules/@types/glob-stream": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", - "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==", "dev": true, "dependencies": { - "@types/glob": "*", - "@types/node": "*" + "@types/node": "*", + "@types/picomatch": "*", + "@types/streamx": "*" } }, "node_modules/@types/gulp": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", - "integrity": "sha512-zzT+wfQ8uwoXjDhRK9Zkmmk09/fbLLmN/yDHFizJiEKIve85qutOnXcP/TM2sKPBTU+Jc16vfPbOMkORMUBN7Q==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.17.tgz", + "integrity": "sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==", "dev": true, "dependencies": { - "@types/undertaker": "*", + "@types/node": "*", + "@types/undertaker": ">=1.2.6", "@types/vinyl-fs": "*", "chokidar": "^3.3.1" } }, - "node_modules/@types/gulp-imagemin": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/gulp-imagemin/-/gulp-imagemin-7.0.3.tgz", - "integrity": "sha512-2jp8LAKDZRMZCGh66vBwyHtya0+whYNuvopw2DxpS8gdy3PUc74xMbg/PHsKzkHsl+tcGVk2Tzrl3AXumJn8tg==", + "node_modules/@types/gulp-filter": { + "version": "3.0.39", + "resolved": "https://registry.npmjs.org/@types/gulp-filter/-/gulp-filter-3.0.39.tgz", + "integrity": "sha512-CmjD9Y90+uFl0sHODOcAwSif2DXkCCkneItIifgbRgzSPTQ0wePzxPkLQPT377Hur+2SvAl4u3jyLitbNRiSkg==", "dev": true, "dependencies": { - "@types/imagemin": "*", - "@types/imagemin-gifsicle": "*", - "@types/imagemin-mozjpeg": "*", - "@types/imagemin-optipng": "*", - "@types/imagemin-svgo": "*", - "@types/node": "*" + "@types/minimatch": "*", + "@types/node": "*", + "@types/vinyl": "*" } }, "node_modules/@types/gulp-rename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/gulp-rename/-/gulp-rename-2.0.1.tgz", - "integrity": "sha512-9ZjeS2RHEnmBmTcyi2+oeye3BgCsWhvi4uv3qCnAg8i6plOuRdaeNxjOves0ELysEXYLBl7bCl5fbVs7AZtgTA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/gulp-rename/-/gulp-rename-2.0.6.tgz", + "integrity": "sha512-pvZdJ004TpC4Ohk9l0CxEXzS9E0L72b5n6lkIEIaWUIy/RlqnkDMHVtEC6InDjd4rt0jZKcvTrDKxeT96WUYnw==", "dev": true, "dependencies": { "@types/node": "*", @@ -585,81 +792,46 @@ } }, "node_modules/@types/gulp-zip": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/gulp-zip/-/gulp-zip-4.0.2.tgz", - "integrity": "sha512-Ii+HkfXPvi86qRM+6iFO9EsnO2eoUX+MLuGgazigGoIzIm05USb7WQl7tqmiFHWWE6MofnO9QRb9INeCbEh6CA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/gulp-zip/-/gulp-zip-4.0.4.tgz", + "integrity": "sha512-iwWKFLIO90D5EtNCqUyiN4IhDA4OEPHdMUfj2l+upEl8nGxCrzPxIKZmpib8l0MqtuHI6FVZDAoDOnrCO9Kp3A==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/imagemin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", - "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", + "node_modules/@types/inquirer": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz", + "integrity": "sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==", "dev": true, "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/imagemin-gifsicle": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", - "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-mozjpeg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", - "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-svgo": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-10.0.2.tgz", - "integrity": "sha512-F4enqbl7eE0JhrwGdJSMKFDn1j1Pk8JsCvnjA5iJKSi+IK3sd4CronabzVmOuEkz663tV7FsRQp1f7SP3zmIaA==", - "dev": true, - "dependencies": { - "@types/imagemin": "*", - "@types/svgo": "2" + "@types/through": "*", + "rxjs": "^7.2.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "node_modules/@types/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-SOnWV7/4szUZaf9qKd+HWah42YdP0unUnu0tBhcZwyBIqP5nfJvoABOM8GOPbY3uCzU0mtFKi/E56q2EKTfNQw==" + "node_modules/@types/lodash": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", + "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", + "dev": true }, "node_modules/@types/md5": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz", - "integrity": "sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.5.tgz", + "integrity": "sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==", "dev": true }, "node_modules/@types/merge-stream": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/merge-stream/-/merge-stream-1.1.2.tgz", - "integrity": "sha512-7faLmaE99g/yX0Y9pF1neh2IUqOf/fXMOWCVzsXjqI1EJ91lrgXmaBKf6bRWM164lLyiHxHt6t/ZO/cIzq61XA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/merge-stream/-/merge-stream-1.1.5.tgz", + "integrity": "sha512-z2DPerX+vlR3C88ec2jqJCO1/yVOGYaVL0JaB2/ri/NJqU8sNnT9NRpDZgJAJAO3Ve72CHIcnSqjU8HWjlHxJg==", "dev": true, "dependencies": { "@types/node": "*" @@ -672,74 +844,81 @@ "dev": true }, "node_modules/@types/mustache": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.1.tgz", - "integrity": "sha512-gFAlWL9Ik21nJioqjlGCnNYbf9zHi0sVbaZ/1hQEBcCEuxfLJDvz4bVJSV6v6CUaoLOz0XEIoP7mSrhJ6o237w==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.5.tgz", + "integrity": "sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA==", "dev": true }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/picomatch": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.3.tgz", + "integrity": "sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==", "dev": true }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true, - "optional": true - }, - "node_modules/@types/request": { - "version": "2.48.8", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", - "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", - "dev": true, - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, - "node_modules/@types/requestretry": { - "version": "1.12.8", - "resolved": "https://registry.npmjs.org/@types/requestretry/-/requestretry-1.12.8.tgz", - "integrity": "sha512-NKdv2WmEe6/V1PmJrflfvGVN9bvuOsnHmNRC4m8TFXPMQnRFKvnnkFN4I6AxAtw4hUi2h3A+z/aH+ir2HYTNOg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/request": "*" - } + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true }, "node_modules/@types/sha1": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/sha1/-/sha1-1.1.3.tgz", - "integrity": "sha512-bXfx/6xrPu1l6pLItGRMPX00lhnJavpj2qiQeLHflXvL2Ix97aC8FTF2/pQoqukRzcCwKyN3csZvOLzamIoaSA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/sha1/-/sha1-1.1.5.tgz", + "integrity": "sha512-eE1PzjW7u2VfxI+bTsvjzjBfpwqvxSpgfUmnRNVY+PJU1NBsdGZlaO/qnVnPKHzzpgIl9YyBIxvrgBvt1mzt2A==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/svgo": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz", - "integrity": "sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==", + "node_modules/@types/streamx": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.5.tgz", + "integrity": "sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true + "node_modules/@types/through": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", + "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/through2": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/through2/-/through2-2.0.41.tgz", + "integrity": "sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/undertaker": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.8.tgz", - "integrity": "sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.11.tgz", + "integrity": "sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==", "dev": true, "dependencies": { "@types/node": "*", @@ -748,24 +927,24 @@ } }, "node_modules/@types/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.4.tgz", + "integrity": "sha512-tW77pHh2TU4uebWXWeEM5laiw8BuJ7pyJYDh6xenOs75nhny2kVgwYbegJ4BoLMYsIrXaBpKYaPdYO3/udG+hg==", "dev": true }, "node_modules/@types/unzipper": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.5.tgz", - "integrity": "sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==", + "version": "0.10.9", + "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.9.tgz", + "integrity": "sha512-vHbmFZAw8emNAOVkHVbS3qBnbr0x/qHQZ+ei1HE7Oy6Tyrptl+jpqnOX+BF5owcu/HZLOV0nJK+K9sjs1Ox2JA==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/vinyl": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.7.tgz", - "integrity": "sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", + "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", "dev": true, "dependencies": { "@types/expect": "^1.20.4", @@ -773,9 +952,9 @@ } }, "node_modules/@types/vinyl-fs": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.12.tgz", - "integrity": "sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.5.tgz", + "integrity": "sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==", "dev": true, "dependencies": { "@types/glob-stream": "*", @@ -783,31 +962,40 @@ "@types/vinyl": "*" } }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -815,50 +1003,27 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -867,29 +1032,56 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -897,21 +1089,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -923,27 +1116,58 @@ } } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -962,25 +1186,28 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ajv": { @@ -1000,30 +1227,37 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "dependencies": { - "ansi-wrap": "0.1.0" + "ansi-wrap": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1053,9 +1287,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -1065,68 +1299,18 @@ "node": ">= 8" } }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" + "engines": { + "node": ">=8.6" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", - "dev": true, - "optional": true, - "dependencies": { - "file-type": "^4.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -1134,63 +1318,21 @@ "dev": true }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/arr-diff": { + "node_modules/array-differ": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", + "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/array-each": { @@ -1202,59 +1344,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", @@ -1264,20 +1353,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1287,71 +1362,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", @@ -1367,22 +1377,30 @@ "node": ">= 0.10" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, "dependencies": { - "async-done": "^1.2.2" + "async-done": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" + } + }, + "node_modules/async-settle/node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/asynckit": { @@ -1391,51 +1409,55 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-retry": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-4.1.0.tgz", + "integrity": "sha512-svdth4H00yhlsjBbjfLQ/sMLkXqeLxhiFC1nE1JtkN/CIssGxqk0UwTEdrVjwA2gr3yJkAulwvDSIm4z4HyPvg==", + "dev": true, + "dependencies": { + "is-retry-allowed": "^2.2.0" + }, + "peerDependencies": { + "axios": "0.x || 1.x" + } + }, + "node_modules/bach": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", + "dev": true, + "dependencies": { + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" + } + }, + "node_modules/bach/node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/balanced-match": { @@ -1444,35 +1466,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/bare-events": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -1492,17 +1491,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "optional": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } + ] }, "node_modules/before-after-hook": { "version": "2.2.3", @@ -1511,531 +1500,50 @@ "dev": true }, "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "dev": true, "engines": { "node": ">=0.6" } }, - "node_modules/bin-build": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", - "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", - "dev": true, - "optional": true, - "dependencies": { - "decompress": "^4.0.0", - "download": "^6.2.2", - "execa": "^0.7.0", - "p-map-series": "^1.0.0", - "tempfile": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-build/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/bin-build/node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "optional": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-build/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-build/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/bin-build/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bin-build/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bin-build/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/bin-build/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "optional": true - }, - "node_modules/bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "optional": true, - "dependencies": { - "execa": "^0.7.0", - "executable": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-check/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/bin-check/node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "optional": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-check/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-check/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/bin-check/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bin-check/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bin-check/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/bin-check/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "optional": true - }, - "node_modules/bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", - "dev": true, - "optional": true, - "dependencies": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", - "dev": true, - "optional": true, - "dependencies": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version-check/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", - "dev": true, - "optional": true, - "dependencies": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-wrapper/node_modules/download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "optional": true, - "dependencies": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-wrapper/node_modules/download/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-wrapper/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "optional": true, - "dependencies": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/got/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "optional": true, - "dependencies": { - "p-timeout": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-wrapper/node_modules/p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "optional": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-wrapper/node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "optional": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "optional": true, "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", "dev": true }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "optional": true - }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -2069,30 +1577,11 @@ "url": "https://feross.org/support" } ], - "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "optional": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true, - "optional": true - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -2102,113 +1591,20 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true, - "optional": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", - "dev": true, - "optional": true, - "dependencies": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2223,64 +1619,12 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "optional": true, - "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "node_modules/case-switcher-js": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/case-switcher-js/-/case-switcher-js-1.1.10.tgz", + "integrity": "sha512-zJ790uCBJGw+fqdPtxpAh6I3/L+tQmn/w8KNyXXkKuIkikFtoSa3woR5QcI9VoKXgrvQp0ai3qHWpu3Z1Wcgxg==", "dev": true }, - "node_modules/caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "optional": true, - "dependencies": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2297,6 +1641,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -2307,16 +1657,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2329,164 +1673,99 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" } }, "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "number-is-nan": "^1.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/clone": { @@ -2498,171 +1777,12 @@ "node": ">=0.8" } }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "optional": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "dev": true }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "optional": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "optional": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2690,6 +1810,15 @@ "color-support": "bin.js" } }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2702,94 +1831,29 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "optional": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==", - "dev": true, - "optional": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, "dependencies": { - "each-props": "^1.3.2", + "each-props": "^3.0.0", "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/core-util-is": { @@ -2827,122 +1891,6 @@ "node": "*" } }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "optional": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true, - "optional": true - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "optional": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "optional": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "optional": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true, - "optional": true - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "optional": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2960,221 +1908,11 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "optional": true, - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "optional": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "optional": true, - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "optional": true, - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "dev": true, - "optional": true, - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", - "dev": true, - "optional": true, - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/dedent-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "dev": true }, "node_modules/deep-is": { "version": "0.1.4", @@ -3182,35 +1920,36 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { - "kind-of": "^5.0.2" + "clone": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=0.8" } }, - "node_modules/define-properties": { + "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -3219,36 +1958,42 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/del": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-7.1.0.tgz", + "integrity": "sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "globby": "^13.1.2", + "graceful-fs": "^4.2.10", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^5.5.0", + "rimraf": "^3.0.2", + "slash": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/del/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3287,6 +2032,12 @@ "node": ">=0.3.1" } }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3335,114 +2086,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "optional": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "optional": true - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true, - "optional": true - }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "optional": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "optional": true, - "dependencies": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -3452,61 +2095,66 @@ "readable-stream": "^2.0.2" } }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true, - "optional": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.1", + "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0" - } - }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/easy-transform-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-transform-stream/-/easy-transform-stream-1.0.1.tgz", + "integrity": "sha512-ktkaa6XR7COAR3oj02CF3IOgz2m1hCaY3SfzvKT4Svt2MhHw9XCt+ncJNWfe2TGz31iqzNGZ8spdKQflj+Rlog==", "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/end-of-stream": { "version": "1.4.4", @@ -3517,147 +2165,34 @@ "once": "^1.4.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "optional": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { + "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, - "optional": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "optional": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "engines": { + "node": ">=6" } }, "node_modules/escape-string-regexp": { @@ -3673,66 +2208,64 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -3742,120 +2275,121 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" }, "engines": { - "node": ">=6.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -3872,9 +2406,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -3883,15 +2417,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3904,7 +2429,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -3913,15 +2438,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3931,397 +2447,6 @@ "node": ">=0.10.0" } }, - "node_modules/exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", - "dev": true, - "optional": true, - "dependencies": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/exec-buffer/node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "optional": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/exec-buffer/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/exec-buffer/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exec-buffer/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exec-buffer/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/exec-buffer/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "optional": true - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "optional": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "optional": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "optional": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -4334,48 +2459,6 @@ "node": ">=0.10.0" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "optional": true, - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "optional": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4383,50 +2466,6 @@ "dev": true }, "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", @@ -4438,37 +2477,53 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">= 0.10" + "node": ">=4" + } + }, + "node_modules/fake-diff": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fake-diff/-/fake-diff-1.0.0.tgz", + "integrity": "sha512-IwvgHWrB+Znl8/XBa2OpSO15SY8sUk8f6ioR1eJDFCwuBnTnQSiApIaynoV1vNqfc4RP9iruQehkyPBlUDJmZQ==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff": "^4.0.2" + } + }, + "node_modules/fake-diff/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "dependencies": { + "color-support": "^1.1.3" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/fast-deep-equal": { @@ -4478,15 +2533,21 @@ "dev": true }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -4511,66 +2572,24 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-xml-parser": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", - "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "optional": true, - "dependencies": { - "strnum": "^1.0.4" - }, - "bin": { - "xml2js": "cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" + "engines": { + "node": ">= 4.9.1" } }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "optional": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", - "dev": true, - "optional": true, - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4583,45 +2602,13 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "node_modules/filesize": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.1.tgz", + "integrity": "sha512-L0cdwZrKlwZQkMSFnCflJ6J2Y+5egO/p3vgRSDQGxQt++QbUZe5gMbRO6kg6gzwQDPvq2Fk9AmoxUNfZ5gdqaQ==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "optional": true, - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=4" + "node": ">= 10.4.0" } }, "node_modules/fill-range": { @@ -4637,229 +2624,69 @@ } }, "node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "optional": true, - "dependencies": { - "semver-regex": "^2.0.0" + "node": ">=10" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/findup-sync/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, "dependencies": { "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", + "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -4867,19 +2694,29 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, "node_modules/for-in": { @@ -4903,80 +2740,31 @@ "node": ">=0.10.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "optional": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "optional": true - }, "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs-mkdirp-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node": ">=10.13.0" } }, "node_modules/fs.realpath": { @@ -4986,9 +2774,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -5027,113 +2815,34 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "optional": true, - "dependencies": { - "npm-conf": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -5142,109 +2851,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/gifsicle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz", - "integrity": "sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "execa": "^5.0.0" - }, - "bin": { - "gifsicle": "cli.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/imagemin/gisicle-bin?sponsor=1" - } - }, - "node_modules/gifsicle/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "optional": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/gifsicle/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gifsicle/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gifsicle/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "optional": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5278,334 +2896,83 @@ } }, "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" + "async-done": "^2.0.0", + "chokidar": "^3.5.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/glob-watcher/node_modules/anymatch": { + "node_modules/glob-watcher/node_modules/async-done": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/glob-watcher/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/glob-watcher/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" + "node": "*" } }, "node_modules/global-modules": { @@ -5651,9 +3018,9 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5665,6 +3032,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -5685,58 +3064,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "optional": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/get-stream": { + "node_modules/globby/node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "optional": true, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "dev": true, + "dependencies": { + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/gray-matter": { @@ -5754,103 +3124,90 @@ "node": ">=6.0" } }, - "node_modules/gray-matter/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", "dev": true, "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" }, "bin": { "gulp": "bin/gulp.js" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", "dev": true, "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" }, "bin": { "gulp": "bin/gulp.js" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/gulp-cli/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/gulp-filter": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-9.0.1.tgz", + "integrity": "sha512-knVYL8h9bfYIeft3VokVTkuaWJkQJMrFCS3yVjZQC6BGg+1dZFoeUY++B9D2X4eFpeNTx9StWK0qnDby3NO3PA==", "dev": true, "dependencies": { - "ansi-wrap": "^0.1.0" + "multimatch": "^7.0.0", + "plugin-error": "^2.0.1", + "slash": "^5.1.0", + "streamfilter": "^3.0.0", + "to-absolute-glob": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-imagemin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-7.1.0.tgz", - "integrity": "sha512-6xBTNybmPY2YrvrhhlS8Mxi0zn0ypusLon63p9XXxDtIf7U7c6KcViz94K7Skosucr3378A6IY2kJSjJyuwylQ==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "fancy-log": "^1.3.2", - "imagemin": "^7.0.0", - "plugin-error": "^1.0.1", - "plur": "^3.0.1", - "pretty-bytes": "^5.3.0", - "through2-concurrent": "^2.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" }, - "optionalDependencies": { - "imagemin-gifsicle": "^7.0.0", - "imagemin-mozjpeg": "^8.0.0", - "imagemin-optipng": "^7.0.0", - "imagemin-svgo": "^7.0.0" - }, "peerDependencies": { "gulp": ">=4" }, @@ -5860,17 +3217,45 @@ } } }, - "node_modules/gulp-imagemin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/gulp-filter/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-plugin-extras": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gulp-plugin-extras/-/gulp-plugin-extras-0.3.0.tgz", + "integrity": "sha512-I/kOBSpo61QsGQZcqozZYEnDseKvpudUafVVWDLYgBFAUJ37kW5R8Sjw9cMYzpGyPUfEYOeoY4p+dkfLqgyJUQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/vinyl": "^2.0.9", + "chalk": "^5.3.0", + "easy-transform-stream": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-plugin-extras/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/gulp-rename": { @@ -5883,19 +3268,21 @@ } }, "node_modules/gulp-zip": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", - "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-6.0.0.tgz", + "integrity": "sha512-fPGvNve2dBoZxGKcviTU7mOa77eQibyhwgGLTxnF+ZCKX8RFaTZKkPbdPnmw0r4TNPRjPCkQB/0VuP+MzgkEYg==", "dev": true, "dependencies": { - "get-stream": "^5.2.0", - "plugin-error": "^1.0.1", - "through2": "^3.0.1", - "vinyl": "^2.1.0", + "get-stream": "^8.0.1", + "gulp-plugin-extras": "^0.3.0", + "vinyl": "^3.0.0", "yazl": "^2.5.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" }, "peerDependencies": { "gulp": ">=4" @@ -5907,83 +3294,15 @@ } }, "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, "dependencies": { - "glogg": "^1.0.0" + "glogg": "^2.2.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.13.0" } }, "node_modules/has-flag": { @@ -5996,25 +3315,27 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "optional": true, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { @@ -6029,96 +3350,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "optional": true, "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "optional": true, - "dependencies": { - "has-symbols": "^1.0.2" + "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" } }, "node_modules/homedir-polyfill": { @@ -6133,42 +3374,16 @@ "node": ">=0.10.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true, - "optional": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10.17.0" + "node": ">=0.10.0" } }, "node_modules/ieee754": { @@ -6189,130 +3404,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "optional": true + ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "dependencies": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==", - "dev": true, - "optional": true, - "dependencies": { - "execa": "^1.0.0", - "gifsicle": "^5.0.0", - "is-gif": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/imagemin/imagemin-gifsicle?sponsor=1" - } - }, - "node_modules/imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==", - "dev": true, - "optional": true, - "dependencies": { - "execa": "^1.0.0", - "is-jpg": "^2.0.0", - "mozjpeg": "^6.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imagemin-optipng": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz", - "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==", - "dev": true, - "optional": true, - "dependencies": { - "exec-buffer": "^3.0.0", - "is-png": "^2.0.0", - "optipng-bin": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imagemin-svgo": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz", - "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==", - "dev": true, - "optional": true, - "dependencies": { - "is-svg": "^4.2.1", - "svgo": "^1.3.2" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sindresorhus/imagemin-svgo?sponsor=1" - } - }, - "node_modules/imagemin/node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/imagemin/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6329,16 +3431,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -6349,12 +3441,15 @@ } }, "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inflight": { @@ -6379,60 +3474,51 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/inquirer": { + "version": "9.2.20", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.20.tgz", + "integrity": "sha512-SFwJJPS+Ms75NV+wzFBHjirG4z3tzvis31h+9NyH1tqjIu2c7vCavlXILZ73q/nPYy8/aw4W+DNzLH5MjfYXiA==", "dev": true, - "optional": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "@inquirer/figures": "^1.0.1", + "@ljharb/through": "^2.3.13", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", - "dev": true, - "optional": true, - "dependencies": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/irregular-plurals": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", - "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, "node_modules/is-absolute": { @@ -6448,46 +3534,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "optional": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -6500,134 +3546,29 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "optional": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } @@ -6641,50 +3582,15 @@ "node": ">=0.10.0" } }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/is-gif": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", - "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", - "dev": true, - "optional": true, - "dependencies": { - "file-type": "^10.4.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-gif/node_modules/file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6697,23 +3603,15 @@ "node": ">=0.10.0" } }, - "node_modules/is-jpg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", - "integrity": "sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "optional": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", - "dev": true, - "optional": true - }, "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -6723,19 +3621,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6745,58 +3630,40 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "optional": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", "dev": true, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { @@ -6808,33 +3675,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-png": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", - "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -6848,92 +3688,17 @@ } }, "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "optional": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-svg": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.2.tgz", - "integrity": "sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw==", - "dev": true, - "optional": true, - "dependencies": { - "fast-xml-parser": "^3.19.0" - }, - "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "optional": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -6946,11 +3711,17 @@ "node": ">=0.10.0" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/is-valid-glob": { "version": "1.0.0", @@ -6961,19 +3732,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -7004,68 +3762,28 @@ "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "optional": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jpeg-js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz", - "integrity": "sha512-CiRVjMKBUp6VYtGwzRjrdnro41yMwKGOWdP9ATXqmixdz2n7KHNwdqthTYSSbOKj/Ha79Gct1sA8ZQpse55TYA==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true, - "optional": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, "node_modules/json-schema-traverse": { @@ -7077,110 +3795,55 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "dev": true }, - "node_modules/junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "node_modules/just-remove": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/just-remove/-/just-remove-3.2.0.tgz", + "integrity": "sha512-gR3EOFIkZapF3g0K4IRRqH4lM+czJEfaOFgrwZl5vNfVUeJqfke9/L67Mf3CgnT3j2HM46C+mdCRvqaCD77Nqg==", "dev": true }, "node_modules/keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "optional": true, "dependencies": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, "node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/levn": { @@ -7197,65 +3860,36 @@ } }, "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" } }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -7270,155 +3904,28 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==", - "dev": true, - "optional": true, - "dependencies": { - "figures": "^1.3.5", - "squeak": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "optional": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==", - "dev": true, - "optional": true, - "dependencies": { - "get-stdin": "^4.0.1", - "indent-string": "^2.1.0", - "longest": "^1.0.0", - "meow": "^3.3.0" - }, - "bin": { - "lpad-align": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lpad-align/node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -7428,219 +3935,16 @@ "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/marked": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-9.0.3.tgz", - "integrity": "sha512-pI/k4nzBG1PEq1J3XFEHxVvjicfjl8rgaMaqclouGSMPhk7Q3Ejb2ZRxx/ZQOcQ1909HzVoWCFYq6oLgtL4BpQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "dev": true, "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 16" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 18" } }, "node_modules/md5": { @@ -7654,35 +3958,6 @@ "is-buffer": "~1.1.6" } }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true, - "optional": true - }, - "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "optional": true, - "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -7711,6 +3986,18 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -7737,55 +4024,34 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "optional": true, "engines": { "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -7798,31 +4064,41 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mozjpeg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz", - "integrity": "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.1.0" - }, - "bin": { - "mozjpeg": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/multimatch": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz", + "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==", + "dev": true, + "dependencies": { + "array-differ": "^4.0.0", + "array-union": "^3.0.1", + "minimatch": "^9.0.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mustache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", @@ -7833,50 +4109,21 @@ } }, "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/natural-compare": { @@ -7885,23 +4132,10 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "optional": true - }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -7918,27 +4152,6 @@ } } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -7948,273 +4161,16 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "optional": true, - "dependencies": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-url/node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-url/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "optional": true, - "dependencies": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-conf/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "optional": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "optional": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "once": "^1.4.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.13.0" } }, "node_modules/object.defaults": { @@ -8232,38 +4188,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "optional": true, - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -8276,37 +4200,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8321,7 +4214,6 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "optional": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -8333,9 +4225,9 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { "deep-is": "^0.1.3", @@ -8343,115 +4235,27 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/optipng-bin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz", - "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.0.0" - }, - "bin": { - "optipng": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "optional": true, - "dependencies": { - "arch": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", - "dev": true, - "optional": true, - "dependencies": { - "p-timeout": "^1.1.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { "node": ">=10" @@ -8460,52 +4264,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "optional": true, - "dependencies": { - "p-reduce": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/p-pipe": { + "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, - "optional": true, "dependencies": { - "p-finally": "^1.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parent-module": { @@ -8534,27 +4344,6 @@ "node": ">=0.8" } }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -8564,31 +4353,13 @@ "node": ">=0.10.0" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, "node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -8645,137 +4416,28 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "optional": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-2.0.1.tgz", + "integrity": "sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==", "dev": true, "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" + "ansi-colors": "^1.0.1" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/plugin-error/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plur": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", - "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", - "dev": true, - "dependencies": { - "irregular-plurals": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/png-js": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-0.1.1.tgz", - "integrity": "sha512-NTtk2SyfjBm+xYl2/VZJBhFnTQ4kU5qWC7VC4/iGbrgiU4FuB4xC+74erxADYJIqZICOR1HCvRA7EBHkpjTg9g==", - "dev": true - }, - "node_modules/png-to-jpeg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/png-to-jpeg/-/png-to-jpeg-1.0.1.tgz", - "integrity": "sha512-3M0hMY84ocnH3pKu+i4GYo5x7OaQPhudCKYjCUxiykh9/wQM1GZOmlsRifxzINeZREIsIBjD2tYt1KsAdgnSkg==", - "dev": true, - "dependencies": { - "jpeg-js": "^0.1.2", - "pify": "^2.3.0", - "png-js": "^0.1.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/png-to-jpeg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/prelude-ls": { @@ -8787,26 +4449,16 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -8824,137 +4476,27 @@ "node": ">=6.0.0" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "optional": true - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, - "optional": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "optional": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8975,77 +4517,26 @@ } ] }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { + "node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -9058,123 +4549,28 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { - "resolve": "^1.1.6" + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "optional": true, - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-bom-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node": ">= 10.13.0" } }, "node_modules/remove-trailing-separator": { @@ -9183,118 +4579,22 @@ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "optional": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10" } }, "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/requestretry": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-5.0.0.tgz", - "integrity": "sha512-Rx0ETW0O1K+PAL/w8XVE2yhBCEtEsu6H690qbyCBT9mAHetXaO3BQ5hO5QGGkawTu9jG29ErmfqJZwX+dUy4tw==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "lodash": "^4.17.15", - "when": "^3.7.7" - }, - "peerDependencies": { - "request": "2.*.*" + "node": ">= 10.13.0" } }, "node_modules/require-directory": { @@ -9306,28 +4606,13 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9361,41 +4646,46 @@ } }, "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, "dependencies": { - "value-or-function": "^3.0.0" + "value-or-function": "^4.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "optional": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "node_modules/retry-axios": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-3.1.3.tgz", + "integrity": "sha512-uwnlAjqg6twTcQB7RvH3OSgAqjqBDS9GFUOT+BhgADDYjoxsB7KfvS6SqYHOPjxM/Z/jVwSwGYdJnPE8at1PoA==", "dev": true, "engines": { - "node": ">=0.12" + "node": ">=18" + }, + "peerDependencies": { + "axios": "*" } }, "node_modules/reusify": { @@ -9423,6 +4713,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9446,6 +4745,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9466,30 +4774,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9505,13 +4789,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -9525,58 +4802,11 @@ "node": ">=4" } }, - "node_modules/section-matter/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/section-matter/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/section-matter/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "optional": true, - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9585,110 +4815,34 @@ } }, "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "dependencies": { - "sver-compat": "^1.5.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/semver-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==", - "dev": true, - "optional": true, - "dependencies": { - "semver": "^5.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semver-truncate/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "sver": "^1.8.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "node_modules/sha1": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", @@ -9723,32 +4877,22 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "engines": { + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "optional": true - }, "node_modules/simple-git": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.1.tgz", - "integrity": "sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.24.0.tgz", + "integrity": "sha512-QqAKee9Twv+3k8IFOFfPB2hnk6as6Y6ACUpwCtQvRYBAes23Wv3SZlHVobAzqcE8gfsisCvPw3HGW3HYM+VYYw==", "dev": true, "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -9761,327 +4905,76 @@ } }, "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-keys": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.0.0.tgz", + "integrity": "sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==", + "dev": true, + "dependencies": { + "is-plain-obj": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-keys-recursive": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/sort-keys-recursive/-/sort-keys-recursive-2.1.10.tgz", + "integrity": "sha512-yRLJbEER/PjU7hSRwXvP+NyXiORufu8rbSbp+3wFRuJZXoi/AhuKczbjuipqn7Le0SsTXK4VUeri2+Ni6WS8Hg==", + "dev": true, + "dependencies": { + "kind-of": "~6.0.2", + "sort-keys": "~4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sort-keys-recursive/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/sort-keys-recursive/node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "is-plain-obj": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", - "dev": true, - "optional": true, - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", "dev": true, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/sprintf-js": { @@ -10090,218 +4983,13 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==", - "dev": true, - "optional": true, - "dependencies": { - "chalk": "^1.0.0", - "console-stream": "^0.1.1", - "lpad-align": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/squeak/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/squeak/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/squeak/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/squeak/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/squeak/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/squeak/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", "dev": true, "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true, - "optional": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "streamx": "^2.13.2" } }, "node_modules/stream-exhaust": { @@ -10310,41 +4998,45 @@ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "node_modules/streamfilter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-3.0.0.tgz", + "integrity": "sha512-kvKNfXCmUyC8lAXSSHCIXBUlo/lhsLcCU/OmzACZYpRUdtKIH68xYhm/+HI15jFJYtNJGYtCgn2wmIiExY1VwA==", "dev": true, - "optional": true, + "dependencies": { + "readable-stream": "^3.0.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.12.0" + } + }, + "node_modules/streamx": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10354,40 +5046,11 @@ "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10395,18 +5058,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -10416,52 +5067,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "optional": true, - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "optional": true, - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -10474,40 +5079,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "optional": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-outer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true, - "optional": true - }, "node_modules/super-sources": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/super-sources/-/super-sources-1.1.1.tgz", "integrity": "sha512-urkv0ksWoPIdRQjiDRrMLLLZvZtsJqU6Txlh3cxi/NhpC+NzlC170owSe8ruOZRJN1eWZ+GdvNsh/QXqMizxtQ==", + "dev": true, "dependencies": { "string-width": "^4.2.3" } @@ -10536,202 +5112,48 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "optionalDependencies": { + "semver": "^6.3.0" } }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "node_modules/sver/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "optional": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, "bin": { - "svgo": "bin/svgo" + "semver": "bin/semver.js" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "optional": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://opencollective.com/unts" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "dev": true, - "optional": true, "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", - "dev": true, - "optional": true, - "dependencies": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - }, - "engines": { - "node": ">=4" + "streamx": "^2.12.5" } }, "node_modules/text-table": { @@ -10740,85 +5162,31 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "optional": true - }, "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "readable-stream": "3" } }, - "node_modules/through2-concurrent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-2.0.0.tgz", - "integrity": "sha512-R5/jLkfMvdmDD+seLwN7vB+mhbqzWop5fAjx5IX8/yQq7VhBhzDmhXgaHAOnhnWkCpRMM7gToYHycB0CS/pd+A==", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { - "through2": "^2.0.0" - } - }, - "node_modules/through2-concurrent/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2-filter/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true, + "os-tmpdir": "~1.0.2" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "node": ">=0.6.0" } }, "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-3.0.0.tgz", + "integrity": "sha512-loO/XEWTRqpfcpI7+Jr2RR2Umaaozx1t6OSVWtMi0oy5F/Fxg3IC+D/TToDnxyAGs7uZBGT/6XmyDUxgsObJXA==", "dev": true, "dependencies": { "is-absolute": "^1.0.0", @@ -10828,52 +5196,6 @@ "node": ">=0.10.0" } }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true, - "optional": true - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10887,46 +5209,24 @@ } }, "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, "dependencies": { - "through2": "^2.0.3" + "streamx": "^2.12.5" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/to-through/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node": ">=10.13.0" } }, "node_modules/toml-v1": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toml-v1/-/toml-v1-1.0.0.tgz", "integrity": "sha512-fMk7vzBrPNFeuAvpN1eLeC3QBvTAKmqD3XRvHj5Z2nGasQfF+b//S4OqByUYRGASwshXM2TBCmMXMNWbnm7EYA==", - "dependencies": { - "super-sources": "^1.1.1" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" + "super-sources": "^1.1.1" } }, "node_modules/tr46": { @@ -10935,48 +5235,6 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dev": true, - "optional": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -10986,10 +5244,22 @@ "utf8-byte-length": "^1.0.1" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -11029,71 +5299,21 @@ } } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11107,9 +5327,9 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -11118,50 +5338,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "optional": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "node": ">=14.17" } }, "node_modules/unc-path-regex": { @@ -11174,45 +5361,43 @@ } }, "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/undertaker/node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } }, "node_modules/undici": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", - "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -11220,125 +5405,31 @@ "node": ">=14.0" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true, - "optional": true - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true }, "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.11.5.tgz", + "integrity": "sha512-lpWMMTvoTTETidcvqsHL/OSdX8fy4/nAe1vOa/WESbscApEamd1gvzn2XteNYvAnTGous8BlCkWxxyv3moxfCA==", "dev": true, "dependencies": { "big-integer": "^1.6.17", - "binary": "~0.3.0", "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", "duplexer2": "~0.1.4", "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" + "graceful-fs": "^4.2.2" } }, - "node_modules/unzipper/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -11358,45 +5449,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "optional": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -11409,38 +5461,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "optional": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -11448,141 +5477,150 @@ "dev": true }, "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node": ">= 10.13.0" } }, "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", + "clone": "^2.1.2", "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "dependencies": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/vinyl-contents/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/vinyl-fs/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "dependencies": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -11599,12 +5637,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==", - "dev": true - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11620,96 +5652,27 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "optional": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/wrappy": { @@ -11718,132 +5681,40 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { - "node": ">=0.4" + "node": ">=10" } }, - "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, "node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "optional": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "node": ">=10" } }, "node_modules/yazl": { @@ -11863,9386 +5734,18 @@ "engines": { "node": ">=6" } - } - }, - "dependencies": { - "@actions/core": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", - "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", - "requires": { - "@actions/http-client": "^2.0.1", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } }, - "@actions/http-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", - "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", - "requires": { - "tunnel": "^0.0.6", - "undici": "^5.25.4" - } - }, - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@egjs/list-differ": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@egjs/list-differ/-/list-differ-1.0.1.tgz", - "integrity": "sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==" - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==" - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dev": true, - "requires": { - "debug": "^4.1.1" - } - }, - "@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dev": true, - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "dev": true, - "requires": { - "@octokit/types": "^6.40.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dev": true, - "requires": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "dev": true, - "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true, - "optional": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/bluebird": { - "version": "3.5.37", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.37.tgz", - "integrity": "sha512-g2qEd+zkfkTEudA2SrMAeAvY7CrFqtbsLILm2dT2VIeKTqMqVzcdfURlvu6FU3srRgbmXN1Srm94pg34EIehww==", - "dev": true - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, - "@types/expect": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", - "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", - "dev": true - }, - "@types/fancy-log": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.1.tgz", - "integrity": "sha512-31Dt9JaGfHretvwVxCBrCFL5iC9MQ3zOXpu+8C4qzW0cxc5rJJVGxB5c/vZ+wmeTk/JjPz/D0gv8BZ+Ip6iCqQ==", - "dev": true - }, - "@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/glob-stream": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", - "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "@types/gulp": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", - "integrity": "sha512-zzT+wfQ8uwoXjDhRK9Zkmmk09/fbLLmN/yDHFizJiEKIve85qutOnXcP/TM2sKPBTU+Jc16vfPbOMkORMUBN7Q==", - "dev": true, - "requires": { - "@types/undertaker": "*", - "@types/vinyl-fs": "*", - "chokidar": "^3.3.1" - } - }, - "@types/gulp-imagemin": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/gulp-imagemin/-/gulp-imagemin-7.0.3.tgz", - "integrity": "sha512-2jp8LAKDZRMZCGh66vBwyHtya0+whYNuvopw2DxpS8gdy3PUc74xMbg/PHsKzkHsl+tcGVk2Tzrl3AXumJn8tg==", - "dev": true, - "requires": { - "@types/imagemin": "*", - "@types/imagemin-gifsicle": "*", - "@types/imagemin-mozjpeg": "*", - "@types/imagemin-optipng": "*", - "@types/imagemin-svgo": "*", - "@types/node": "*" - } - }, - "@types/gulp-rename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/gulp-rename/-/gulp-rename-2.0.1.tgz", - "integrity": "sha512-9ZjeS2RHEnmBmTcyi2+oeye3BgCsWhvi4uv3qCnAg8i6plOuRdaeNxjOves0ELysEXYLBl7bCl5fbVs7AZtgTA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/vinyl": "*" - } - }, - "@types/gulp-zip": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/gulp-zip/-/gulp-zip-4.0.2.tgz", - "integrity": "sha512-Ii+HkfXPvi86qRM+6iFO9EsnO2eoUX+MLuGgazigGoIzIm05USb7WQl7tqmiFHWWE6MofnO9QRb9INeCbEh6CA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/imagemin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", - "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/imagemin-gifsicle": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", - "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-mozjpeg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", - "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-svgo": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-10.0.2.tgz", - "integrity": "sha512-F4enqbl7eE0JhrwGdJSMKFDn1j1Pk8JsCvnjA5iJKSi+IK3sd4CronabzVmOuEkz663tV7FsRQp1f7SP3zmIaA==", - "dev": true, - "requires": { - "@types/imagemin": "*", - "@types/svgo": "2" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-SOnWV7/4szUZaf9qKd+HWah42YdP0unUnu0tBhcZwyBIqP5nfJvoABOM8GOPbY3uCzU0mtFKi/E56q2EKTfNQw==" - }, - "@types/md5": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz", - "integrity": "sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==", - "dev": true - }, - "@types/merge-stream": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/merge-stream/-/merge-stream-1.1.2.tgz", - "integrity": "sha512-7faLmaE99g/yX0Y9pF1neh2IUqOf/fXMOWCVzsXjqI1EJ91lrgXmaBKf6bRWM164lLyiHxHt6t/ZO/cIzq61XA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/mustache": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.1.tgz", - "integrity": "sha512-gFAlWL9Ik21nJioqjlGCnNYbf9zHi0sVbaZ/1hQEBcCEuxfLJDvz4bVJSV6v6CUaoLOz0XEIoP7mSrhJ6o237w==", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true, - "optional": true - }, - "@types/request": { - "version": "2.48.8", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", - "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, - "@types/requestretry": { - "version": "1.12.8", - "resolved": "https://registry.npmjs.org/@types/requestretry/-/requestretry-1.12.8.tgz", - "integrity": "sha512-NKdv2WmEe6/V1PmJrflfvGVN9bvuOsnHmNRC4m8TFXPMQnRFKvnnkFN4I6AxAtw4hUi2h3A+z/aH+ir2HYTNOg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/request": "*" - } - }, - "@types/sha1": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/sha1/-/sha1-1.1.3.tgz", - "integrity": "sha512-bXfx/6xrPu1l6pLItGRMPX00lhnJavpj2qiQeLHflXvL2Ix97aC8FTF2/pQoqukRzcCwKyN3csZvOLzamIoaSA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/svgo": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz", - "integrity": "sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "@types/undertaker": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.8.tgz", - "integrity": "sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/undertaker-registry": "*", - "async-done": "~1.3.2" - } - }, - "@types/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", - "dev": true - }, - "@types/unzipper": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.5.tgz", - "integrity": "sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/vinyl": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.7.tgz", - "integrity": "sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==", - "dev": true, - "requires": { - "@types/expect": "^1.20.4", - "@types/node": "*" - } - }, - "@types/vinyl-fs": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.12.tgz", - "integrity": "sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==", - "dev": true, - "requires": { - "@types/glob-stream": "*", - "@types/node": "*", - "@types/vinyl": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansi-wrap": { + "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "optional": true - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", - "dev": true, - "optional": true - } - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "optional": true - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", - "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "optional": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, - "bin-build": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", - "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", - "dev": true, - "optional": true, - "requires": { - "decompress": "^4.0.0", - "download": "^6.2.2", - "execa": "^0.7.0", - "p-map-series": "^1.0.0", - "tempfile": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "optional": true - } - } - }, - "bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "optional": true, - "requires": { - "execa": "^0.7.0", - "executable": "^4.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "optional": true - } - } - }, - "bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - } - }, - "bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", - "dev": true, - "optional": true, - "requires": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - } - } - }, - "bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", - "dev": true, - "optional": true, - "requires": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" - }, - "dependencies": { - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "optional": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - } - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "optional": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - } - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - } - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true, - "optional": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "optional": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "optional": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "optional": true - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^2.0.0" - } - } - } - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "optional": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true, - "optional": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true, - "optional": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", - "dev": true, - "optional": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", - "dev": true, - "optional": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "optional": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "optional": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - } - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "optional": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "optional": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==", - "dev": true, - "optional": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "optional": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true, - "optional": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "optional": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "optional": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "optional": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "optional": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true, - "optional": true - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "optional": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "optional": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "dev": true, - "optional": true - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "optional": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true, - "optional": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "optional": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "dev": true, - "optional": true - } - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", - "dev": true, - "optional": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true - } - } - }, - "dedent-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "requires": { - "kind-of": "^5.0.2" - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "discord-webhook-node": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/discord-webhook-node/-/discord-webhook-node-1.1.8.tgz", - "integrity": "sha512-3u0rrwywwYGc6HrgYirN/9gkBYqmdpvReyQjapoXARAHi0P0fIyf3W5tS5i3U3cc7e44E+e7dIHYUeec7yWaug==", - "dev": true, - "requires": { - "form-data": "^3.0.0", - "node-fetch": "^2.6.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "optional": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "optional": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true, - "optional": true - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "optional": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "optional": true, - "requires": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - } - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true, - "optional": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "optional": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true, - "optional": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "optional": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", - "dev": true, - "optional": true, - "requires": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "optional": true - } - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "optional": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "optional": true, - "requires": { - "pump": "^3.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "optional": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "optional": true, - "requires": { - "pify": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "optional": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "optional": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-xml-parser": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", - "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", - "dev": true, - "optional": true, - "requires": { - "strnum": "^1.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "optional": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "dev": true, - "optional": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "optional": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "optional": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "optional": true - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "optional": true, - "requires": { - "npm-conf": "^1.1.0" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gifsicle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz", - "integrity": "sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "execa": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "optional": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "optional": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "optional": true, - "requires": { - "path-key": "^3.0.0" - } - } - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - } - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "optional": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "optional": true - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - } - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "dependencies": { - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - } - } - }, - "gulp-imagemin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-7.1.0.tgz", - "integrity": "sha512-6xBTNybmPY2YrvrhhlS8Mxi0zn0ypusLon63p9XXxDtIf7U7c6KcViz94K7Skosucr3378A6IY2kJSjJyuwylQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "fancy-log": "^1.3.2", - "imagemin": "^7.0.0", - "imagemin-gifsicle": "^7.0.0", - "imagemin-mozjpeg": "^8.0.0", - "imagemin-optipng": "^7.0.0", - "imagemin-svgo": "^7.0.0", - "plugin-error": "^1.0.1", - "plur": "^3.0.1", - "pretty-bytes": "^5.3.0", - "through2-concurrent": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "gulp-rename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", - "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", - "dev": true - }, - "gulp-zip": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", - "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", - "dev": true, - "requires": { - "get-stream": "^5.2.0", - "plugin-error": "^1.0.1", - "through2": "^3.0.1", - "vinyl": "^2.1.0", - "yazl": "^2.5.1" - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "optional": true - } - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "optional": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "optional": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "optional": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true, - "optional": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "optional": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "optional": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "requires": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - } - } - }, - "imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "gifsicle": "^5.0.0", - "is-gif": "^3.0.0" - } - }, - "imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "is-jpg": "^2.0.0", - "mozjpeg": "^6.0.0" - } - }, - "imagemin-optipng": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz", - "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==", - "dev": true, - "optional": true, - "requires": { - "exec-buffer": "^3.0.0", - "is-png": "^2.0.0", - "optipng-bin": "^6.0.0" - } - }, - "imagemin-svgo": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz", - "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==", - "dev": true, - "optional": true, - "requires": { - "is-svg": "^4.2.1", - "svgo": "^1.3.2" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true, - "optional": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "optional": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", - "dev": true, - "optional": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true - }, - "irregular-plurals": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", - "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "optional": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "optional": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "optional": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-gif": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", - "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^10.4.0" - }, - "dependencies": { - "file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "dev": true, - "optional": true - } - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-jpg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", - "integrity": "sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==", - "dev": true, - "optional": true - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", - "dev": true, - "optional": true - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "optional": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "optional": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "optional": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "optional": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-png": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", - "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", - "dev": true, - "optional": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "optional": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "optional": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "optional": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-svg": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.2.tgz", - "integrity": "sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw==", - "dev": true, - "optional": true, - "requires": { - "fast-xml-parser": "^3.19.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "optional": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "optional": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "jpeg-js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz", - "integrity": "sha512-CiRVjMKBUp6VYtGwzRjrdnro41yMwKGOWdP9ATXqmixdz2n7KHNwdqthTYSSbOKj/Ha79Gct1sA8ZQpse55TYA==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "optional": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==", - "dev": true, - "optional": true, - "requires": { - "figures": "^1.3.5", - "squeak": "^1.0.0" - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", - "dev": true, - "optional": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "optional": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "optional": true - }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "^4.0.1", - "indent-string": "^2.1.0", - "longest": "^1.0.0", - "meow": "^3.3.0" - }, - "dependencies": { - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "requires": { - "repeating": "^2.0.0" - } - } - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "optional": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-9.0.3.tgz", - "integrity": "sha512-pI/k4nzBG1PEq1J3XFEHxVvjicfjl8rgaMaqclouGSMPhk7Q3Ejb2ZRxx/ZQOcQ1909HzVoWCFYq6oLgtL4BpQ==", - "dev": true - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true, - "optional": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "optional": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "optional": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mozjpeg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz", - "integrity": "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.1.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "optional": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "dependencies": { - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "optional": true - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "optional": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "optional": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "optional": true - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "optional": true, - "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "optional": true - } - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "optional": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "optional": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "optional": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "optional": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "optional": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "optipng-bin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz", - "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.0.0" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "optional": true, - "requires": { - "arch": "^2.1.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "optional": true - }, - "p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", - "dev": true, - "optional": true, - "requires": { - "p-timeout": "^1.1.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "optional": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", - "dev": true, - "optional": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", - "dev": true, - "optional": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", - "dev": true, - "optional": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, - "optional": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "optional": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "dependencies": { - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - } - } - }, - "plur": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", - "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", - "dev": true, - "requires": { - "irregular-plurals": "^2.0.0" - } - }, - "png-js": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-0.1.1.tgz", - "integrity": "sha512-NTtk2SyfjBm+xYl2/VZJBhFnTQ4kU5qWC7VC4/iGbrgiU4FuB4xC+74erxADYJIqZICOR1HCvRA7EBHkpjTg9g==", - "dev": true - }, - "png-to-jpeg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/png-to-jpeg/-/png-to-jpeg-1.0.1.tgz", - "integrity": "sha512-3M0hMY84ocnH3pKu+i4GYo5x7OaQPhudCKYjCUxiykh9/wQM1GZOmlsRifxzINeZREIsIBjD2tYt1KsAdgnSkg==", - "dev": true, - "requires": { - "jpeg-js": "^0.1.2", - "pify": "^2.3.0", - "png-js": "^0.1.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "optional": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "optional": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, - "optional": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "optional": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "optional": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "dependencies": { - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "requires": { - "repeating": "^2.0.0" - } - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "optional": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, - "requestretry": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-5.0.0.tgz", - "integrity": "sha512-Rx0ETW0O1K+PAL/w8XVE2yhBCEtEsu6H690qbyCBT9mAHetXaO3BQ5hO5QGGkawTu9jG29ErmfqJZwX+dUy4tw==", - "dev": true, - "requires": { - "extend": "^3.0.2", - "lodash": "^4.17.15", - "when": "^3.7.7" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "optional": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "optional": true, - "requires": { - "commander": "^2.8.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true, - "optional": true - }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==", - "dev": true, - "optional": true, - "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - } - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "requires": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "optional": true - }, - "simple-git": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.1.tgz", - "integrity": "sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==", - "dev": true, - "requires": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.4" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, - "optional": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", - "dev": true, - "optional": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^1.0.0", - "console-stream": "^0.1.1", - "lpad-align": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "optional": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "optional": true - } - } - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true, - "optional": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "optional": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "optional": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "optional": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true - } - } - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true, - "optional": true - }, - "super-sources": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/super-sources/-/super-sources-1.1.1.tgz", - "integrity": "sha512-urkv0ksWoPIdRQjiDRrMLLLZvZtsJqU6Txlh3cxi/NhpC+NzlC170owSe8ruOZRJN1eWZ+GdvNsh/QXqMizxtQ==", - "requires": { - "string-width": "^4.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "optional": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "optional": true - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", - "dev": true, - "optional": true, - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "optional": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "through2-concurrent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-2.0.0.tgz", - "integrity": "sha512-R5/jLkfMvdmDD+seLwN7vB+mhbqzWop5fAjx5IX8/yQq7VhBhzDmhXgaHAOnhnWkCpRMM7gToYHycB0CS/pd+A==", - "dev": true, - "requires": { - "through2": "^2.0.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "optional": true - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true, - "optional": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", - "dev": true, - "requires": { - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "toml-v1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toml-v1/-/toml-v1-1.0.0.tgz", - "integrity": "sha512-fMk7vzBrPNFeuAvpN1eLeC3QBvTAKmqD3XRvHj5Z2nGasQfF+b//S4OqByUYRGASwshXM2TBCmMXMNWbnm7EYA==", - "requires": { - "super-sources": "^1.1.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", - "dev": true, - "optional": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true - } - } - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "optional": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "dependencies": { - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - } - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", - "dev": true - }, - "undici": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", - "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", - "requires": { - "@fastify/busboy": "^2.0.0" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true, - "optional": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - }, - "dependencies": { - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - } - } - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "optional": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "optional": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - } - } - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "optional": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - } - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "optional": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true } } } diff --git a/tools/package.json b/tools/package.json index 913044f..7dd94bd 100644 --- a/tools/package.json +++ b/tools/package.json @@ -1,60 +1,87 @@ { "name": "nomi-ceu-build-tools", - "version": "1.2.2", + "version": "2.0.0", "description": "Nomifactory CEu Buildscript and Tools.", "main": "gulpfile.js", "author": "Nomi-CEu Team", "license": "LGPL-3.0", + "type": "module", + "private": true, + "scripts": { + "gulp": "node --import ./tsNodeESMRegister.mjs node_modules/gulp/bin/gulp.js", + "check": "tsc --pretty" + }, + "imports": { + "#types/*": "./types/*", + "#utils/*": "./utils/*", + "#tasks/*": "./tasks/*", + "#globals": "./globals.ts", + "#buildConfig": "./buildConfig.ts" + }, "devDependencies": { - "@octokit/rest": "^18.3.5", - "@types/bluebird": "^3.5.33", - "@types/fancy-log": "^1.3.1", - "@types/gulp": "^4.0.8", - "@types/gulp-imagemin": "^7.0.2", - "@types/gulp-rename": "^2.0.0", - "@types/gulp-zip": "^4.0.1", - "@types/md5": "^2.3.2", - "@types/merge-stream": "^1.1.2", - "@types/mustache": "^4.1.1", - "@types/requestretry": "^1.12.7", - "@types/sha1": "^1.1.2", - "@types/unzipper": "^0.10.3", - "@typescript-eslint/eslint-plugin": "^4.18.0", - "@typescript-eslint/parser": "^4.18.0", - "bluebird": "^3.7.2", - "del": "^6.0.0", + "@actions/core": "^1.10.1", + "@inquirer/confirm": "^3.1.6", + "@inquirer/prompts": "^5.0.2", + "@octokit/rest": "^20.1.1", + "@types/diff-match-patch": "^1.0.36", + "@types/fake-diff": "^1.0.3", + "@types/fancy-log": "^2.0.2", + "@types/gulp": "^4.0.17", + "@types/gulp-filter": "^3.0.39", + "@types/gulp-rename": "^2.0.6", + "@types/gulp-zip": "^4.0.4", + "@types/inquirer": "^9.0.7", + "@types/lodash": "^4.17.1", + "@types/md5": "^2.3.5", + "@types/merge-stream": "^1.1.5", + "@types/mustache": "^4.2.5", + "@types/picomatch": "^2.3.3", + "@types/sha1": "^1.1.5", + "@types/through2": "^2.0.41", + "@types/unzipper": "^0.10.9", + "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/parser": "^7.8.0", + "axios": "^1.6.8", + "axios-retry": "^4.1.0", + "case-switcher-js": "^1.1.10", + "colors": "^1.4.0", + "dedent-js": "^1.0.1", + "del": "^7.1.0", + "diff-match-patch": "^1.0.5", "discord-webhook-node": "^1.1.8", - "eslint": "^7.22.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-prettier": "^3.3.1", - "fancy-log": "^1.3.3", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "fake-diff": "^1.0.0", + "fancy-log": "^2.0.0", + "filesize": "^10.1.1", "gray-matter": "^4.0.3", - "gulp": "^4.0.2", - "gulp-imagemin": "^7.1.0", + "gulp": "^5.0.0", + "gulp-filter": "^9.0.1", "gulp-rename": "^2.0.0", - "gulp-zip": "^5.1.0", - "marked": "^9.0.3", + "gulp-zip": "^6.0.0", + "inquirer": "^9.2.20", + "javascript-stringify": "^2.1.0", + "just-diff": "^6.0.2", + "just-remove": "^3.2.0", + "lodash": "^4.17.21", + "marked": "^12.0.2", "md5": "^2.3.0", "merge-stream": "^2.0.0", - "mustache": "^4.1.0", - "png-to-jpeg": "^1.0.1", - "prettier": "^2.2.1", - "request": "^2.88.2", - "requestretry": "^5.0.0", + "mustache": "^4.2.0", + "picomatch": "^4.0.2", + "prettier": "^3.2.5", + "retry-axios": "^3.1.3", "sanitize-filename": "^1.6.3", "sha1": "^1.1.1", - "simple-git": "^3.19.1", - "ts-node": "^10.9.1", - "typescript": "^4.8.4", - "unzipper": "^0.10.11", + "simple-git": "^3.24.0", + "sort-keys": "^5.0.0", + "sort-keys-recursive": "^2.1.10", + "through2": "^4.0.2", + "toml-v1": "^1.0.0", + "ts-node": "^10.9.2", + "typescript": "5.4.5", + "unzipper": "^0.11.5", "upath": "^2.0.1" - }, - "dependencies": { - "@actions/core": "^1.10.1", - "@egjs/list-differ": "^1.0.1", - "@types/json-stable-stringify-without-jsonify": "^1.0.1", - "dedent-js": "^1.0.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "toml-v1": "^1.0.0" } } diff --git a/tools/storage/savedQBPorter.json b/tools/storage/savedQBPorter.json new file mode 100644 index 0000000..e7c1ff7 --- /dev/null +++ b/tools/storage/savedQBPorter.json @@ -0,0 +1,310 @@ +{ + "savedQuestMap": [ + { + "normal": 3, + "expert": 3 + }, + { + "normal": 19, + "expert": 53 + }, + { + "normal": 21, + "expert": 21 + }, + { + "normal": 22, + "expert": 22 + }, + { + "normal": 38, + "expert": 38 + }, + { + "normal": 52, + "expert": 52 + }, + { + "normal": 56, + "expert": 56 + }, + { + "normal": 60, + "expert": 60 + }, + { + "normal": 65, + "expert": 65 + }, + { + "normal": 78, + "expert": 78 + }, + { + "normal": 84, + "expert": 84 + }, + { + "normal": 88, + "expert": 88 + }, + { + "normal": 94, + "expert": 94 + }, + { + "normal": 95, + "expert": 95 + }, + { + "normal": 102, + "expert": 102 + }, + { + "normal": 116, + "expert": 116 + }, + { + "normal": 149, + "expert": 149 + }, + { + "normal": 150, + "expert": 150 + }, + { + "normal": 167, + "expert": 167 + }, + { + "normal": 190, + "expert": 190 + }, + { + "normal": 197, + "expert": 197 + }, + { + "normal": 201, + "expert": 201 + }, + { + "normal": 214, + "expert": 214 + }, + { + "normal": 216, + "expert": 216 + }, + { + "normal": 228, + "expert": 228 + }, + { + "normal": 240, + "expert": 240 + }, + { + "normal": 251, + "expert": 251 + }, + { + "normal": 253, + "expert": 253 + }, + { + "normal": 262, + "expert": 262 + }, + { + "normal": 263, + "expert": 263 + }, + { + "normal": 279, + "expert": 279 + }, + { + "normal": 311, + "expert": 311 + }, + { + "normal": 328, + "expert": 328 + }, + { + "normal": 339, + "expert": 339 + }, + { + "normal": 386, + "expert": 386 + }, + { + "normal": 389, + "expert": 389 + }, + { + "normal": 399, + "expert": 399 + }, + { + "normal": 402, + "expert": 402 + }, + { + "normal": 490, + "expert": 490 + }, + { + "normal": 504, + "expert": 504 + }, + { + "normal": 524, + "expert": 524 + }, + { + "normal": 531, + "expert": 531 + }, + { + "normal": 535, + "expert": 535 + }, + { + "normal": 549, + "expert": 549 + }, + { + "normal": 672, + "expert": 672 + }, + { + "normal": 727, + "expert": 727 + }, + { + "normal": 729, + "expert": 729 + }, + { + "normal": 750, + "expert": 750 + }, + { + "normal": 774, + "expert": 774 + }, + { + "normal": 782, + "expert": 1045 + }, + { + "normal": 795, + "expert": 795 + }, + { + "normal": 814, + "expert": 814 + }, + { + "normal": 827, + "expert": 827 + }, + { + "normal": 828, + "expert": 828 + }, + { + "normal": 838, + "expert": 838 + }, + { + "normal": 844, + "expert": 844 + }, + { + "normal": 847, + "expert": 847 + }, + { + "normal": 849, + "expert": 849 + }, + { + "normal": 856, + "expert": 856 + }, + { + "normal": 880, + "expert": 880 + }, + { + "normal": 895, + "expert": 895 + }, + { + "normal": 897, + "expert": 897 + }, + { + "normal": 903, + "expert": 903 + }, + { + "normal": 906, + "expert": 906 + }, + { + "normal": 1027, + "expert": 935 + }, + { + "normal": 1031, + "expert": 1031 + }, + { + "normal": 1033, + "expert": 1033 + }, + { + "normal": 1035, + "expert": 1035 + }, + { + "normal": 1037, + "expert": 1037 + }, + { + "normal": 1042, + "expert": 1042 + }, + { + "normal": 1046, + "expert": 1046 + }, + { + "normal": 1047, + "expert": 1047 + }, + { + "normal": 1048, + "expert": 1048 + }, + { + "normal": 1049, + "expert": 1049 + }, + { + "normal": 1050, + "expert": 1050 + } + ], + "ignoreQuestsNormal": [ + 959 + ], + "ignoreQuestsExpert": [], + "alwaysAskQuestsNormal": [], + "alwaysAskQuestsExpert": [] +} \ No newline at end of file diff --git a/tools/tasks/changelog/categoryManagement.ts b/tools/tasks/changelog/categoryManagement.ts index ac233c2..ab30fd1 100644 --- a/tools/tasks/changelog/categoryManagement.ts +++ b/tools/tasks/changelog/categoryManagement.ts @@ -1,5 +1,9 @@ -import { categories } from "./definitions"; -import { Category, ChangelogMessage, SubCategory } from "../../types/changelogTypes"; +import { categories } from "./definitions.ts"; +import { + Category, + ChangelogMessage, + SubCategory, +} from "#types/changelogTypes.ts"; export function categoriesSetup(): void { // Initialize Category Lists diff --git a/tools/tasks/changelog/changelogData.ts b/tools/tasks/changelog/changelogData.ts index a6968ac..e1b2f94 100644 --- a/tools/tasks/changelog/changelogData.ts +++ b/tools/tasks/changelog/changelogData.ts @@ -1,5 +1,10 @@ -import { Commit, FixUpInfo, InputReleaseType, ParsedModInfo } from "../../types/changelogTypes"; -import { getLastGitTag, getTags, isEnvVariableSet } from "../../util/util"; +import { + Commit, + FixUpInfo, + InputReleaseType, + ParsedModInfo, +} from "#types/changelogTypes.ts"; +import { getLastGitTag, getTags, isEnvVariableSet } from "#utils/util.ts"; export default class ChangelogData { since: string; @@ -26,30 +31,33 @@ export default class ChangelogData { modInfoList: Map; /** - * A normal initialisation. + * Constructor. Non-Async Inits are performed here. */ - async init(): Promise { + constructor() { this.since = getLastGitTag(); this.to = "HEAD"; // If this is a tagged build, fetch the tag before last. if (isEnvVariableSet("GITHUB_TAG")) { this.since = getLastGitTag(process.env.GITHUB_TAG); - this.to = process.env.GITHUB_TAG; + this.to = process.env.GITHUB_TAG ?? "HEAD"; } // Get Release Type this.releaseType = "Release"; - if (isEnvVariableSet("RELEASE_TYPE")) this.releaseType = process.env.RELEASE_TYPE as InputReleaseType; + if (isEnvVariableSet("RELEASE_TYPE")) + this.releaseType = process.env.RELEASE_TYPE as InputReleaseType; // See if current run is test if (isEnvVariableSet("TEST_CHANGELOG")) { try { - this.isTest = JSON.parse(process.env.TEST_CHANGELOG.toLowerCase()); + this.isTest = JSON.parse( + (process.env.TEST_CHANGELOG ?? "false").toLowerCase(), + ); } catch (err) { throw new Error("Test Changelog Env Variable set to Invalid Value."); } - } + } else this.isTest = false; // Initialise Final Builder this.builder = []; @@ -61,10 +69,18 @@ export default class ChangelogData { this.shaList = new Set(); this.combineList = new Map(); + this.modInfoList = new Map(); + + // Init Tag Sets for Now, so we don't have to deal with nullable params + this.tags = new Set(); + this.compareTags = new Set(); + } + /** + * A normal initialisation. Async Inits are called here. + */ + async init(): Promise { this.tags = new Set(await getTags(this.to)); this.compareTags = new Set(await getTags(this.since)); - - this.modInfoList = new Map(); } shouldIterate(): boolean { @@ -76,7 +92,7 @@ export default class ChangelogData { * @return tags The Compare Tags */ getIterations(): string[] { - const iterations = process.env.COMPARE_TAG; + const iterations = process.env.COMPARE_TAG ?? ""; return iterations.split(",").map((tag) => tag.trim()); } diff --git a/tools/tasks/changelog/definitions.ts b/tools/tasks/changelog/definitions.ts index b7d6e9b..33ed54d 100644 --- a/tools/tasks/changelog/definitions.ts +++ b/tools/tasks/changelog/definitions.ts @@ -7,10 +7,10 @@ import { IgnoreLogic, Parser, SubCategory, -} from "../../types/changelogTypes"; -import { modpackManifest } from "../../globals"; -import { parseCommitBody } from "./parser"; -import { parseFixUp } from "./specialParser"; +} from "#types/changelogTypes.ts"; +import { modpackManifest } from "#globals"; +import { parseCommitBody } from "./parser.ts"; +import { parseFixUp } from "./specialParser.ts"; /* Values */ export const defaultIndentation = ""; @@ -48,7 +48,10 @@ const normalMode: SubCategory = { commitKey: "[NM]", keyName: "Normal Mode" }; const hardMode: SubCategory = { commitKey: "[HM]", keyName: "Hard Mode" }; /* Misc Sub Category Keys */ -const qolChanges: SubCategory = { commitKey: "[QOL]", keyName: "Quality of Life" }; +const qolChanges: SubCategory = { + commitKey: "[QOL]", + keyName: "Quality of Life", +}; /* Set Sub Categories (Sub Categories that do not let any commit in) */ const bothModes: SubCategory = { keyName: "Both Modes" }; @@ -127,7 +130,11 @@ export const categories: Category[] = [ ]; /* Parsing Util Methods */ -const defaultSkipCallback = (_commit: Commit, _commitMessage: string, commitBody: string): boolean => { +const defaultSkipCallback = ( + _commit: Commit, + _commitMessage: string, + commitBody?: string, +): boolean => { if (!commitBody) return false; return commitBody.includes(skipKey); }; @@ -135,7 +142,7 @@ const defaultParsingCallback = async ( parser: Parser, commit: Commit, commitMessage: string, - commitBody: string, + commitBody?: string, ): Promise => { if (!commitBody) return false; return parseCommitBody(commitMessage, commitBody, commit, parser); @@ -146,12 +153,20 @@ const defaultParsingCallback = async ( const fixupParsing: Parser = { skipCallback: () => false, // No need to care about message/body, never parse expand/details commits - itemCallback: (_parser, commit, _commitMessage: string, _commitBody?: string, fix?: FixUpInfo) => - parseFixUp(commit, fix), + itemCallback: ( + _parser, + commit, + _commitMessage: string, + _commitBody?: string, + fix?: FixUpInfo, + ) => parseFixUp(commit, fix), addCommitListCallback: () => false, addSHACallback: () => false, // Don't apply fixup if it is not meant to apply to fixes - applyFixCalback: (fix) => fix.changeFixes === undefined || fix.changeFixes === null || (fix.changeFixes as boolean), + applyFixCalback: (fix) => + fix.changeFixes === undefined || + fix.changeFixes === null || + (fix.changeFixes as boolean), }; const overridesParsing: Parser = { @@ -159,11 +174,13 @@ const overridesParsing: Parser = { skipCallback: defaultSkipCallback, itemCallback: defaultParsingCallback, leftOverCallback: (commit, commitMessage, _commitBody, subMessages) => { - generalCategory.changelogSection.get(generalCategory.defaultSubCategory).push({ - commitMessage: commitMessage, - commitObject: commit, - subChangelogMessages: subMessages, - }); + generalCategory.changelogSection + ?.get(generalCategory.defaultSubCategory) + ?.push({ + commitMessage: commitMessage, + commitObject: commit, + subChangelogMessages: subMessages, + }); }, addCommitListCallback: () => true, }; @@ -188,7 +205,12 @@ const finalParsing: Parser = { * Note that unless `addSHA` of the category is set to false, a commit parsed in a previous category will not be allowed to be parsed in future categories, * even if they fit in the dirs. */ -export const parsers: Parser[] = [fixupParsing, overridesParsing, manifestParsing, finalParsing]; +export const changelogParsers: Parser[] = [ + fixupParsing, + overridesParsing, + manifestParsing, + finalParsing, +]; /* Parsing Information / Allocations for Mod Changes */ @@ -219,7 +241,10 @@ export interface ModChangesAllocation { } // These templates must be triple bracketed, because we don't want these to be html safe -export const modChangesAllocations: Record = { +export const modChangesAllocations: Record< + ModChangesType, + ModChangesAllocation +> = { added: { category: generalCategory, subCategory: modAdditions, @@ -242,7 +267,8 @@ export const modChangesAllocations: Record /* Ignore Checks */ const targetBeforeCheck: IgnoreCheck = (tag, data) => !data.tags.has(tag); const targetAfterCheck: IgnoreCheck = (tag, data) => data.tags.has(tag); -const compareBeforeCheck: IgnoreCheck = (tag, data) => !data.compareTags.has(tag); +const compareBeforeCheck: IgnoreCheck = (tag, data) => + !data.compareTags.has(tag); const compareAfterCheck: IgnoreCheck = (tag, data) => data.compareTags.has(tag); const compareIsCheck: IgnoreCheck = (tag, data) => data.since === tag; const compareNotCheck: IgnoreCheck = (tag, data) => data.since !== tag; @@ -262,8 +288,10 @@ export const ignoreChecks: Record = { }; /* Ignore Logic */ -const andLogic: IgnoreLogic = (checkResults) => checkResults.filter((result) => result === false).length === 0; -const orLogic: IgnoreLogic = (checkResults) => checkResults.filter((result) => result === true).length > 0; +const andLogic: IgnoreLogic = (checkResults) => + checkResults.filter((result) => !result).length === 0; +const orLogic: IgnoreLogic = (checkResults) => + checkResults.filter((result) => result).length > 0; const nandLogic: IgnoreLogic = (checkResults) => !andLogic(checkResults); const norLogic: IgnoreLogic = (checkResults) => !orLogic(checkResults); diff --git a/tools/tasks/changelog/generateModChanges.ts b/tools/tasks/changelog/generateModChanges.ts index 212e0d5..e14b5d4 100644 --- a/tools/tasks/changelog/generateModChanges.ts +++ b/tools/tasks/changelog/generateModChanges.ts @@ -1,19 +1,34 @@ -import { cleanupVersion, compareAndExpandManifestDependencies, getChangelog, getFileAtRevision } from "../../util/util"; -import { ModpackManifest, ModpackManifestFile } from "../../types/modpackManifest"; -import { ChangelogMessage, Commit, ModChangeInfo } from "../../types/changelogTypes"; -import ListDiffer, { DiffResult } from "@egjs/list-differ"; +import { + ArrayUnique, + cleanupVersion, + compareAndExpandManifestDependencies, + getChangelog, + getFileAtRevision, + getUniqueToArray, +} from "#utils/util.ts"; +import { + ModpackManifest, + ModpackManifestFile, +} from "#types/modpackManifest.ts"; +import { + ChangelogMessage, + Commit, + ModChangeInfo, +} from "#types/changelogTypes.ts"; import dedent from "dedent-js"; import mustache from "mustache"; -import { modChangesAllocations, repoLink } from "./definitions"; -import ChangelogData from "./changelogData"; -import { SpecialChangelogFormatting } from "../../types/changelogTypes"; -import { sortCommitListReverse } from "./pusher"; -import { error } from "fancy-log"; +import { modChangesAllocations, repoLink } from "./definitions.ts"; +import ChangelogData from "./changelogData.ts"; +import { SpecialChangelogFormatting } from "#types/changelogTypes.ts"; +import { sortCommitListReverse } from "./pusher.ts"; +import { logError } from "#utils/log.ts"; /** * Mod Changes special formatting */ -const getModChangesFormatting: (commits: Commit[]) => SpecialChangelogFormatting = (commits) => { +const getModChangesFormatting: ( + commits?: Commit[], +) => SpecialChangelogFormatting = (commits) => { return { formatting: (message, subMessage, indentation, commits) => { // Sub messages are details, so make them bold & italic @@ -26,8 +41,11 @@ const getModChangesFormatting: (commits: Commit[]) => SpecialChangelogFormatting const authors: string[] = []; const formattedCommits: string[] = []; commits.forEach((commit) => { - if (!authors.includes(commit.author_name)) authors.push(commit.author_name); - formattedCommits.push(`[\`${commit.hash.substring(0, 7)}\`](${repoLink}commit/${commit.hash})`); + if (!authors.includes(commit.author_name)) + authors.push(commit.author_name); + formattedCommits.push( + `[\`${commit.hash.substring(0, 7)}\`](${repoLink}commit/${commit.hash})`, + ); }); authors.sort(); return `${indentation}* ${message} - **${authors.join("**, **")}** (${formattedCommits.join(", ")})`; @@ -40,27 +58,37 @@ const getModChangesFormatting: (commits: Commit[]) => SpecialChangelogFormatting return `${indentation}* ${message} - **${author}** ([\`${shortSHA}\`](${repoLink}commit/${commit.hash}))`; }, storage: commits, - } as SpecialChangelogFormatting; + } as SpecialChangelogFormatting; }; /** * Pushes the mod changes, with their relative commits, to their respective sub categories in the specified category. */ -export default async function generateModChanges(data: ChangelogData): Promise { - const oldManifest: ModpackManifest = JSON.parse(getFileAtRevision("manifest.json", data.since)); - const newManifest: ModpackManifest = JSON.parse(getFileAtRevision("manifest.json", data.to)); - const comparisonResult = await compareAndExpandManifestDependencies(oldManifest, newManifest); +export default async function generateModChanges( + data: ChangelogData, +): Promise { + const oldManifest: ModpackManifest = JSON.parse( + await getFileAtRevision("manifest.json", data.since), + ); + const newManifest: ModpackManifest = JSON.parse( + await getFileAtRevision("manifest.json", data.to), + ); + const comparisonResult = await compareAndExpandManifestDependencies( + oldManifest, + newManifest, + ); const commitList = await getChangelog(data.since, data.to, ["manifest.json"]); const projectIDsToCommits: Map = new Map(); - commitList.forEach((commit) => { - const projectIDs = getChangedProjectIDs(commit.hash); + for (const commit of commitList) { + const projectIDs = await getChangedProjectIDs(commit.hash); projectIDs.forEach((id) => { - if (projectIDsToCommits.has(id)) projectIDsToCommits.get(id).push(commit); + if (projectIDsToCommits.has(id)) + projectIDsToCommits.get(id)?.push(commit); else projectIDsToCommits.set(id, [commit]); }); - }); + } [ { @@ -86,16 +114,18 @@ export default async function generateModChanges(data: ChangelogData): Promise name); list.forEach((info) => { - let commits: Commit[] = undefined; + let commits: Commit[] | undefined = undefined; if (info.projectID && projectIDsToCommits.has(info.projectID)) { - commits = projectIDsToCommits.get(info.projectID); + commits = projectIDsToCommits.get(info.projectID) ?? []; // Sort array so newest commits appear at end instead of start of commit string sortCommitListReverse(commits); } block.allocation.category.changelogSection - .get(block.allocation.subCategory) - .push(getModChangeMessage(info, block.allocation.template, data, commits)); + ?.get(block.allocation.subCategory) + ?.push( + getModChangeMessage(info, block.allocation.template, data, commits), + ); }); }); } @@ -111,13 +141,13 @@ function getModChangeMessage( info: ModChangeInfo, template: string, data: ChangelogData, - commits: Commit[], + commits?: Commit[], ): ChangelogMessage { const oldVersion = cleanupVersion(info.oldVersion); const newVersion = cleanupVersion(info.newVersion); // If not provided with either version, return just mod name - if (!oldVersion && !newVersion) + if ((!oldVersion && !newVersion) || !info.projectID) return { commitMessage: info.modName, specialFormatting: getModChangesFormatting(commits), @@ -131,12 +161,12 @@ function getModChangeMessage( }); // Parse Info - let subMessages: ChangelogMessage[] = undefined; + let subMessages: ChangelogMessage[] | undefined = undefined; if (data.modInfoList.has(info.projectID)) { const modInfo = data.modInfoList.get(info.projectID); - if (modInfo.info) text = `${text} ***(${modInfo.info})***`; - if (modInfo.details) - subMessages = modInfo.details.map((detail) => { + if (modInfo?.info) text = `${text} ***(${modInfo.info})***`; + if (modInfo?.details) + subMessages = modInfo?.details.map((detail) => { detail.specialFormatting = getModChangesFormatting(commits); return detail; }); @@ -151,64 +181,56 @@ function getModChangeMessage( /** * Gets what project IDs, in manifest.json, a commit changed. - * @param SHA The sha of the commit + * @param sha The sha of the commit */ -function getChangedProjectIDs(SHA: string): number[] { - const change = getCommitChange(SHA); +async function getChangedProjectIDs(sha: string): Promise { + const change = await getCommitChange(sha); const projectIDs: number[] = []; - if (!change || !change.diff) { + if (!change) { return projectIDs; } // Add all unique IDs from both diff lists - change.diff.added.forEach((index) => { - const id = change.newManifest.files[index].projectID; - if (!projectIDs.includes(id)) projectIDs.push(id); + change.arr1Unique.forEach((file) => { + if (!projectIDs.includes(file.projectID)) projectIDs.push(file.projectID); }); - - change.diff.removed.forEach((index) => { - const id = change.oldManifest.files[index].projectID; - if (!projectIDs.includes(id)) projectIDs.push(id); + change.arr2Unique.forEach((file) => { + if (!projectIDs.includes(file.projectID)) projectIDs.push(file.projectID); }); return projectIDs; } -/** - * A storage of what parts of the 'manifest.json' file a commit changed. - */ -interface CommitChange { - diff: DiffResult; - oldManifest: ModpackManifest; - newManifest: ModpackManifest; -} - /** * Gets what parts of the 'manifest.json' file a commit changed. - * @param SHA The sha of the commit + * @param sha The sha of the commit */ -function getCommitChange(SHA: string): CommitChange { +async function getCommitChange( + sha: string, +): Promise | undefined> { let oldManifest: ModpackManifest, newManifest: ModpackManifest; try { - oldManifest = JSON.parse(getFileAtRevision("manifest.json", `${SHA}^`)) as ModpackManifest; - newManifest = JSON.parse(getFileAtRevision("manifest.json", SHA)) as ModpackManifest; + oldManifest = JSON.parse( + await getFileAtRevision("manifest.json", `${sha}^`), + ) as ModpackManifest; + newManifest = JSON.parse( + await getFileAtRevision("manifest.json", sha), + ) as ModpackManifest; } catch (e) { - error(dedent` - Failed to parse the manifest.json file at commit ${SHA} or the commit before! + logError(dedent` + Failed to parse the manifest.json file at commit ${sha} or the commit before! Skipping...`); - return; + return undefined; } - let result: DiffResult; - if (oldManifest && newManifest) { - const differ = new ListDiffer(oldManifest.files, (e) => e.fileID); - result = differ.update(newManifest.files); - } + let result: ArrayUnique | undefined = undefined; + if (oldManifest && newManifest) + result = getUniqueToArray( + oldManifest.files, + newManifest.files, + (e) => e.fileID, + ); - return { - diff: result, - oldManifest: oldManifest, - newManifest: newManifest, - }; + return result; } diff --git a/tools/tasks/changelog/createChangelog.ts b/tools/tasks/changelog/index.ts similarity index 55% rename from tools/tasks/changelog/createChangelog.ts rename to tools/tasks/changelog/index.ts index 22fc768..822ba9a 100644 --- a/tools/tasks/changelog/createChangelog.ts +++ b/tools/tasks/changelog/index.ts @@ -1,16 +1,21 @@ import fs from "fs"; -import { rootDirectory } from "../../globals"; +import { rootDirectory } from "#globals"; import upath from "upath"; -import marked from "marked"; -import buildConfig from "../../buildConfig"; -import { categoriesSetup } from "./categoryManagement"; -import ChangelogData from "./changelogData"; -import { parsers } from "./definitions"; -import parse from "./parser"; -import { specialParserSetup } from "./specialParser"; -import generateModChanges from "./generateModChanges"; -import pushAll, { pushChangelog, pushSeperator, pushSetup, pushTitle } from "./pusher"; -import log from "fancy-log"; +import { marked } from "marked"; +import buildConfig from "#buildConfig"; +import { categoriesSetup } from "./categoryManagement.ts"; +import ChangelogData from "./changelogData.ts"; +import { changelogParsers } from "./definitions.ts"; +import parseParser from "./parser.ts"; +import { specialParserSetup } from "./specialParser.ts"; +import generateModChanges from "./generateModChanges.ts"; +import pushAll, { + pushChangelog, + pushSeperator, + pushSetup, + pushTitle, +} from "./pusher.ts"; +import logInfo from "#utils/log.ts"; /** * Generates a changelog based on environmental variables, and saves it a changelog data class. @@ -27,13 +32,13 @@ async function createChangelog(): Promise { pushTitle(data); for (const tag of tags) { const iteration = tags.indexOf(tag); - log(`Iteration ${iteration + 1} of Changelog.`); + logInfo(`Iteration ${iteration + 1} of Changelog.`); await data.setupIteration(tag); categoriesSetup(); specialParserSetup(data); - for (const parser of parsers) { - await parse(data, parser); + for (const parser of changelogParsers) { + await parseParser(data, parser); } await generateModChanges(data); @@ -47,13 +52,13 @@ async function createChangelog(): Promise { } return data; } - log("No Iterations Detected."); + logInfo("No Iterations Detected."); categoriesSetup(); specialParserSetup(data); - for (const parser of parsers) { - await parse(data, parser); + for (const parser of changelogParsers) { + await parseParser(data, parser); } await generateModChanges(data); @@ -71,8 +76,14 @@ export const createRootChangelog = async (): Promise => { const builder = (await createChangelog()).builder; // Write files. - await fs.promises.writeFile(upath.join(rootDirectory, "CHANGELOG.md"), builder.join("\n")); - return fs.promises.writeFile(upath.join(rootDirectory, "CHANGELOG_CF.md"), marked.parse(builder.join("\n"))); + await fs.promises.writeFile( + upath.join(rootDirectory, "CHANGELOG.md"), + builder.join("\n"), + ); + return fs.promises.writeFile( + upath.join(rootDirectory, "CHANGELOG_CF.md"), + await marked(builder.join("\n"), { async: true }), + ); }; /** @@ -83,9 +94,12 @@ export const createBuildChangelog = async (): Promise => { const builder = (await createChangelog()).builder; // Write files. - await fs.promises.writeFile(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md"), builder.join("\n")); + await fs.promises.writeFile( + upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md"), + builder.join("\n"), + ); return fs.promises.writeFile( upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG_CF.md"), - marked.parse(builder.join("\n")), + await marked(builder.join("\n"), { async: true }), ); }; diff --git a/tools/tasks/changelog/parser.ts b/tools/tasks/changelog/parser.ts index 066b740..8ffe0bb 100644 --- a/tools/tasks/changelog/parser.ts +++ b/tools/tasks/changelog/parser.ts @@ -1,4 +1,11 @@ -import { Category, Commit, FixUpInfo, Ignored, Parser, SubCategory } from "../../types/changelogTypes"; +import { + Category, + Commit, + FixUpInfo, + Ignored, + Parser, + SubCategory, +} from "#types/changelogTypes.ts"; import { categories, combineKey, @@ -9,44 +16,67 @@ import { modInfoKey, noCategoryKey, priorityKey, -} from "./definitions"; -import { parseCombine, parseDetails, parseExpand, parseIgnore, parseModInfo, parsePriority } from "./specialParser"; -import { getChangelog } from "../../util/util"; -import ChangelogData from "./changelogData"; +} from "./definitions.ts"; +import { + parseCombine, + parseDetails, + parseExpand, + parseIgnore, + parseModInfo, + parsePriority, +} from "./specialParser.ts"; +import { getChangelog } from "#utils/util.ts"; +import ChangelogData from "./changelogData.ts"; -export default async function parseParser(data: ChangelogData, parser: Parser): Promise { +export default async function parseParser( + data: ChangelogData, + parser: Parser, +): Promise { const commits = await getChangelog(data.since, data.to, parser.dirs); for (const commit of commits) { if (data.shaList.has(commit.hash)) continue; - let savedFix: FixUpInfo = undefined; + let savedFix: FixUpInfo | undefined = undefined; if (data.commitFixes.has(commit.hash)) { const fixUpInfo = data.commitFixes.get(commit.hash); - if (!parser.applyFixCalback || parser.applyFixCalback(fixUpInfo)) { - applyFix(commit, fixUpInfo); - } else { - savedFix = fixUpInfo; + if (fixUpInfo) { + if (!parser.applyFixCalback || parser.applyFixCalback(fixUpInfo)) { + applyFix(commit, fixUpInfo); + } else { + savedFix = fixUpInfo; + } } } if (parser.skipCallback(commit, commit.message, commit.body)) { - if (!parser.addSHACallback || parser.addSHACallback(commit, true)) data.shaList.add(commit.hash); + if (!parser.addSHACallback || parser.addSHACallback(commit, true)) + data.shaList.add(commit.hash); continue; } - const parsed = await parser.itemCallback(parser, commit, commit.message, commit.body, savedFix); + const parsed = await parser.itemCallback( + parser, + commit, + commit.message, + commit.body, + savedFix, + ); if (parsed instanceof Ignored) { if (parsed.getCommitList() && parser.addCommitListCallback) { - if (parser.addCommitListCallback(commit, true)) data.commitList.push(commit); + if (parser.addCommitListCallback(commit, true)) + data.commitList.push(commit); } continue; } - if (!parsed && parser.leftOverCallback) parser.leftOverCallback(commit, commit.message, commit.body, []); - if (!parser.addSHACallback || parser.addSHACallback(commit, parsed)) data.shaList.add(commit.hash); + if (!parsed && parser.leftOverCallback) + parser.leftOverCallback(commit, commit.message, commit.body, []); + if (!parser.addSHACallback || parser.addSHACallback(commit, parsed)) + data.shaList.add(commit.hash); - if (parser.addCommitListCallback(commit, parsed)) data.commitList.push(commit); + if (parser.addCommitListCallback(commit, parsed)) + data.commitList.push(commit); } } @@ -102,7 +132,8 @@ export async function parseCommitBody( commitObject.priority = newPriority; } - if (commitBody.includes(modInfoKey)) await parseModInfo(commitBody, commitObject); + if (commitBody.includes(modInfoKey)) + await parseModInfo(commitBody, commitObject); if (commitBody.includes(detailsKey)) { await parseDetails(commitMessage, commitBody, commitObject, parser); return true; @@ -125,13 +156,18 @@ export async function parseCommitBody( * @param indentation The indentation of the message, if needed. Defaults to "". * @return added If the commit message was added to a category */ -function sortCommit(message: string, commitBody: string, commit: Commit, indentation = defaultIndentation): boolean { +function sortCommit( + message: string, + commitBody: string, + commit: Commit, + indentation = defaultIndentation, +): boolean { const sortedCategories: Category[] = findCategories(commitBody); if (sortedCategories.length === 0) return false; sortedCategories.forEach((category) => { const subCategory = findSubCategory(commitBody, category); - category.changelogSection.get(subCategory).push({ + category.changelogSection?.get(subCategory)?.push({ commitMessage: message, commitObject: commit, indentation: indentation, @@ -145,7 +181,7 @@ function sortCommit(message: string, commitBody: string, commit: Commit, indenta * @param commitBody The commit body to sort with * @return categoryList The categories that the commit belongs in. Return undefined if no category specified via keys. */ -export function findCategories(commitBody: string): Category[] | undefined { +export function findCategories(commitBody: string): Category[] { const sortedCategories: Category[] = []; for (const category of categories) { if (category.commitKey !== undefined) { @@ -160,7 +196,10 @@ export function findCategories(commitBody: string): Category[] | undefined { /** * Finds the correct Sub Category a commit should go in. Must be given the Category first! */ -export function findSubCategory(commitBody: string, category: Category): SubCategory { +export function findSubCategory( + commitBody: string, + category: Category, +): SubCategory { for (const subCategory of category.subCategories) { if (subCategory.commitKey !== undefined) { if (commitBody.includes(subCategory.commitKey)) { diff --git a/tools/tasks/changelog/pusher.ts b/tools/tasks/changelog/pusher.ts index 0af5b42..16b0763 100644 --- a/tools/tasks/changelog/pusher.ts +++ b/tools/tasks/changelog/pusher.ts @@ -1,9 +1,9 @@ -import ChangelogData from "./changelogData"; -import { categories, defaultIndentation } from "./definitions"; -import { Category, ChangelogMessage, Commit } from "../../types/changelogTypes"; -import { repoLink } from "./definitions"; +import ChangelogData from "./changelogData.ts"; +import { categories, defaultIndentation } from "./definitions.ts"; +import { Category, ChangelogMessage, Commit } from "#types/changelogTypes.ts"; +import { repoLink } from "./definitions.ts"; import { Octokit } from "@octokit/rest"; -import { getIssueURL, getNewestIssueURLs } from "../../util/util"; +import { getIssueURL, getNewestIssueURLs } from "#utils/util.ts"; let data: ChangelogData; let octokit: Octokit; @@ -39,10 +39,16 @@ export function pushTitle(inputData: ChangelogData): void { timeZoneName: "short", }); // noinspection HtmlDeprecatedAttribute - data.builder.push(`

${data.releaseType} (${date})

`, ""); + data.builder.push( + `

${data.releaseType} (${date})

`, + "", + ); } else { // noinspection HtmlUnknownAttribute - data.builder.push(`

${data.releaseType} ${data.to}

`, ""); + data.builder.push( + `

${data.releaseType} ${data.to}

`, + "", + ); data.builder.push("{{{ CF_REDIRECT }}}", ""); } } @@ -94,7 +100,7 @@ async function pushCategory(category: Category) { // Push All Sub Categories for (const subCategory of category.subCategories) { // Loop through key list instead of map to produce correct order - const list = category.changelogSection.get(subCategory); + const list = category.changelogSection?.get(subCategory); if (list && list.length != 0) { // Push Key Name (only pushes if Key Name is not "") if (subCategory.keyName) { @@ -137,7 +143,11 @@ async function pushCategory(category: Category) { * @param transform A function to turn each element of type T into an element of type Commit * @param backup A backup sort, to call when either element does not have a commit object, or when the commit objects' times are the same. Optional, if not set, will just return 0 (equal) or will compare commit messages. */ -function sortCommitList(list: T[], transform: (obj: T) => Commit | undefined, backup?: (a: T, b: T) => number) { +function sortCommitList( + list: T[], + transform: (obj: T) => Commit | undefined, + backup?: (a: T, b: T) => number, +) { list.sort((a, b): number => { const commitA = transform(a); const commitB = transform(b); @@ -150,9 +160,11 @@ function sortCommitList(list: T[], transform: (obj: T) => Commit | undefined, const dateB = new Date(commitB.date); // This is reversed, so higher priorities go on top - if (commitB.priority !== commitA.priority) return commitB.priority - commitA.priority; + if (commitB.priority !== commitA.priority) + return (commitB.priority ?? 0) - (commitA.priority ?? 0); // This is reversed, so the newest commits go on top - if (dateB.getTime() - dateA.getTime() !== 0) return dateB.getTime() - dateA.getTime(); + if (dateB.getTime() - dateA.getTime() !== 0) + return dateB.getTime() - dateA.getTime(); if (backup) return backup(a, b); return commitA.message.localeCompare(commitB.message); }); @@ -168,8 +180,9 @@ export function sortCommitListReverse(list: Commit[]): void { const dateB = new Date(b.date); // This is reversed, so higher priorities go on top - if (b.priority !== a.priority) return b.priority - a.priority; // Priority is still highest first - if (dateA.getTime() - dateB.getTime() !== 0) return dateA.getTime() - dateB.getTime(); + if (b.priority !== a.priority) return (b.priority ?? 0) - (a.priority ?? 0); // Priority is still highest first + if (dateA.getTime() - dateB.getTime() !== 0) + return dateA.getTime() - dateB.getTime(); return a.message.localeCompare(b.message); }); } @@ -180,8 +193,14 @@ export function sortCommitListReverse(list: Commit[]): void { * @param subMessage Whether this message is a subMessage (used in details). Set to true to make it a subMessage (different parsing). Defaults to false. * @return string Formatted Changelog Message */ -async function formatChangelogMessage(changelogMessage: ChangelogMessage, subMessage = false): Promise { - const indentation = changelogMessage.indentation == undefined ? defaultIndentation : changelogMessage.indentation; +async function formatChangelogMessage( + changelogMessage: ChangelogMessage, + subMessage = false, +): Promise { + const indentation = + changelogMessage.indentation == undefined + ? defaultIndentation + : changelogMessage.indentation; const message = changelogMessage.commitMessage.trim(); if (changelogMessage.specialFormatting) @@ -194,7 +213,8 @@ async function formatChangelogMessage(changelogMessage: ChangelogMessage, subMes if (changelogMessage.commitObject && !subMessage) { if (data.combineList.has(changelogMessage.commitObject.hash)) { - const commits = data.combineList.get(changelogMessage.commitObject.hash); + const commits = + data.combineList.get(changelogMessage.commitObject.hash) ?? []; commits.push(changelogMessage.commitObject); // Sort original array so newest commits appear at the end instead of start of commit string @@ -207,11 +227,16 @@ async function formatChangelogMessage(changelogMessage: ChangelogMessage, subMes commits.forEach((commit) => { if (processedSHAs.has(commit.hash)) return; - if (!authors.includes(commit.author_name) && !authorEmails.has(commit.author_email)) { + if ( + !authors.includes(commit.author_name) && + !authorEmails.has(commit.author_email) + ) { authors.push(commit.author_name); authorEmails.add(commit.author_email); } - formattedCommits.push(`[\`${commit.hash.substring(0, 7)}\`](${repoLink}commit/${commit.hash})`); + formattedCommits.push( + `[\`${commit.hash.substring(0, 7)}\`](${repoLink}commit/${commit.hash})`, + ); processedSHAs.add(commit.hash); }); @@ -232,7 +257,11 @@ async function formatChangelogMessage(changelogMessage: ChangelogMessage, subMes * Returns a formatted commit */ function formatCommit(commit: Commit): string { - const date = new Date(commit.date).toLocaleDateString("en-us", { year: "numeric", month: "short", day: "numeric" }); + const date = new Date(commit.date).toLocaleDateString("en-us", { + year: "numeric", + month: "short", + day: "numeric", + }); const formattedCommit = `${commit.message} - **${commit.author_name}** (${date})`; const shortSHA = commit.hash.substring(0, 7); @@ -249,7 +278,11 @@ async function transformAllIssueURLs(changelog: string[]) { for (let i = 0; i < changelog.length; i++) { const categoryFormatted = changelog[i]; // Transform PR and/or Issue tags into a link. - promises.push(transformTags(categoryFormatted).then((categoryTransformed) => (changelog[i] = categoryTransformed))); + promises.push( + transformTags(categoryFormatted).then( + (categoryTransformed) => (changelog[i] = categoryTransformed), + ), + ); } // Apply all Link Changes await Promise.all(promises); @@ -261,13 +294,19 @@ async function transformAllIssueURLs(changelog: string[]) { async function transformTags(message: string): Promise { const promises: Promise[] = []; if (message.search(/#\d+/) !== -1) { - const matched = message.match(/#\d+/g); + const matched = message.match(/#\d+/g) ?? []; for (const match of matched) { // Extract digits - const digits = Number.parseInt(match.match(/\d+/)[0]); + const digitsMatch = match.match(/\d+/); + if (!digitsMatch) continue; + const digits = Number.parseInt(digitsMatch[0]); // Get PR/Issue Info (PRs are listed in the Issue API Endpoint) - promises.push(getIssueURL(digits, octokit).then((url) => message.replace(match, `[#${digits}](${url})`))); + promises.push( + getIssueURL(digits, octokit).then((url) => + message.replace(match, `[#${digits}](${url})`), + ), + ); } } diff --git a/tools/tasks/changelog/specialParser.ts b/tools/tasks/changelog/specialParser.ts index 413e32b..a43d989 100644 --- a/tools/tasks/changelog/specialParser.ts +++ b/tools/tasks/changelog/specialParser.ts @@ -10,7 +10,7 @@ import { ParsedModInfo, Parser, PriorityInfo, -} from "../../types/changelogTypes"; +} from "#types/changelogTypes.ts"; import dedent from "dedent-js"; import matter, { GrayMatterFile } from "gray-matter"; import { @@ -32,12 +32,13 @@ import { modInfoKey, modInfoList, priorityKey, -} from "./definitions"; -import { findCategories, findSubCategory } from "./parser"; -import ChangelogData from "./changelogData"; -import { error } from "fancy-log"; -import { parse } from "toml-v1"; +} from "./definitions.ts"; +import { findCategories, findSubCategory } from "./parser.ts"; +import ChangelogData from "./changelogData.ts"; +import toml from "toml-v1"; +import { logError } from "#utils/log.ts"; +const { parse } = toml; let data: ChangelogData; export function specialParserSetup(inputData: ChangelogData): void { @@ -47,18 +48,26 @@ export function specialParserSetup(inputData: ChangelogData): void { /** * Reads a commit's priority. */ -export async function parsePriority(commitBody: string, commitObject: Commit): Promise { +export async function parsePriority( + commitBody: string, + commitObject: Commit, +): Promise { if (!commitBody.includes(priorityKey)) return undefined; - const info = await parseTOML(commitBody, commitObject, priorityKey); + const info = await parseTOML( + commitBody, + commitObject, + priorityKey, + ); if (!info) return undefined; if (!info.priority) { - error(dedent` + logError(dedent` Priority Info in body: \`\`\` ${commitBody}\`\`\` of commit object ${commitObject.hash} (${commitObject.message}) is missing priority info (key 'priority').`); - if (data.isTest) throw new Error("Failed to Parse Priority Info. See Above."); + if (data.isTest) + throw new Error("Failed to Parse Priority Info. See Above."); return undefined; } @@ -70,13 +79,16 @@ export async function parsePriority(commitBody: string, commitObject: Commit): P * @commit The Commit Body. Does check whether the ignore key is there. * @return Returns undefined to continue, and an Ignored object if to skip. */ -export async function parseIgnore(commitBody: string, commitObject: Commit): Promise { +export async function parseIgnore( + commitBody: string, + commitObject: Commit, +): Promise { if (!commitBody.includes(ignoreKey)) return undefined; const info = await parseTOML(commitBody, commitObject, ignoreKey); if (!info) return undefined; if (!info.checks) { - error(dedent` + logError(dedent` Ignore Info in body: \`\`\` ${commitBody}\`\`\` @@ -89,7 +101,7 @@ export async function parseIgnore(commitBody: string, commitObject: Commit): Pro try { infoKeys = Object.keys(info.checks); } catch (err) { - error(dedent` + logError(dedent` Could not get the keys in Ignore Info of body: \`\`\` ${commitBody}\`\`\` @@ -102,9 +114,10 @@ export async function parseIgnore(commitBody: string, commitObject: Commit): Pro const ignoreKeys = new Set(Object.keys(ignoreChecks)); const checkResults: boolean[] = []; infoKeys.forEach((key) => { - if (ignoreKeys.has(key)) checkResults.push(ignoreChecks[key].call(this, info.checks[key], data)); + if (ignoreKeys.has(key)) + checkResults.push(ignoreChecks[key](info.checks[key], data)); else { - error(dedent` + logError(dedent` Ignore Check with key '${key}' in body: \`\`\` ${commitBody}\`\`\` @@ -112,11 +125,12 @@ export async function parseIgnore(commitBody: string, commitObject: Commit): Pro Only accepts keys: ${Array.from(ignoreKeys) .map((key) => `'${key}'`) .join(", ")}.`); - if (data.isTest) throw new Error("Failed Parsing Ignore Check. See Above."); + if (data.isTest) + throw new Error("Failed Parsing Ignore Check. See Above."); } }); if (checkResults.length === 0) { - error(dedent` + logError(dedent` No Ignore Checks found in body: \`\`\` ${commitBody}\`\`\` @@ -124,16 +138,18 @@ export async function parseIgnore(commitBody: string, commitObject: Commit): Pro Only accepts keys: ${Array.from(ignoreKeys) .map((key) => `'${key}'`) .join(", ")}.`); - if (data.isTest) throw new Error("Failed Parsing Ignore Checks. See Above."); + if (data.isTest) + throw new Error("Failed Parsing Ignore Checks. See Above."); return undefined; } /* Find Logic */ let logic: IgnoreLogic; if (info.logic === undefined) logic = defaultIgnoreLogic; - else if (Object.keys(ignoreLogics).includes(info.logic)) logic = ignoreLogics[info.logic]; + else if (Object.keys(ignoreLogics).includes(info.logic)) + logic = ignoreLogics[info.logic]; else { - error(dedent` + logError(dedent` Ignore Logic '${info.logic}' in body: \`\`\` ${commitBody}\`\`\` @@ -145,14 +161,17 @@ export async function parseIgnore(commitBody: string, commitObject: Commit): Pro logic = defaultIgnoreLogic; } - if (logic.call(this, checkResults)) return new Ignored(info.addCommitList); + if (logic(checkResults)) return new Ignored(info.addCommitList); return undefined; } /** * Parses a commit with 'Fixup'. */ -export async function parseFixUp(commit: Commit, fix?: FixUpInfo): Promise { +export async function parseFixUp( + commit: Commit, + fix?: FixUpInfo, +): Promise { if (!commit.body || !commit.body.includes(fixUpKey)) return false; await parseTOMLWithRootToList( commit.body, @@ -169,7 +188,9 @@ export async function parseFixUp(commit: Commit, fix?: FixUpInfo): Promise { let title = commit.message; // Replace "\r\n" (Caused by editing on GitHub) with "\n", as the output matter has this done. - let body = commit.body.replace(/\r\n/g, "\n").replace(matter.matter.trim(), ""); + let body = commit.body + .replace(/\r\n/g, "\n") + .replace(matter.matter.trim(), ""); // Apply Ignored Fixes if (fix) { @@ -201,19 +222,32 @@ export async function parseFixUp(commit: Commit, fix?: FixUpInfo): Promise { +export async function parseModInfo( + commitBody: string, + commitObject: Commit, +): Promise { await parseTOMLWithRootToList( commitBody, commitObject, modInfoKey, modInfoList, (item): boolean => { - const invalidProjectID = !item.projectID || typeof item.projectID !== "number" || Number.isNaN(item.projectID); + // noinspection SuspiciousTypeOfGuard + const invalidProjectID = + !item.projectID || + typeof item.projectID !== "number" || + Number.isNaN(item.projectID); const invalidInfo = !item.info; const invalidRootDetails = !item.detail; - const invalidDetails = !item.details || !Array.isArray(item.details) || !(item.details.length > 0); + const invalidDetails = + !item.details || + !Array.isArray(item.details) || + !(item.details.length > 0); // Invalid if invalid ID, or invalid info and invalid details - return invalidProjectID || (invalidInfo && invalidRootDetails && invalidDetails); + return ( + invalidProjectID || + (invalidInfo && invalidRootDetails && invalidDetails) + ); }, async (item) => { data.modInfoList.set(item.projectID, await getParsedModInfo(item)); @@ -226,7 +260,11 @@ export async function parseModInfo(commitBody: string, commitObject: Commit): Pr */ async function getParsedModInfo(modInfo: ModInfo): Promise { const subMessages: ChangelogMessage[] = []; - if (modInfo.detail) subMessages.push({ commitMessage: modInfo.detail, indentation: indentationLevel }); + if (modInfo.detail) + subMessages.push({ + commitMessage: modInfo.detail, + indentation: indentationLevel, + }); if (modInfo.details && modInfo.details.length > 0) subMessages.push( ...modInfo.details.map((detail) => { @@ -243,7 +281,11 @@ async function getParsedModInfo(modInfo: ModInfo): Promise { /** * Parses a commit with 'expand'. */ -export async function parseExpand(commitBody: string, commitObject: Commit, parser: Parser): Promise { +export async function parseExpand( + commitBody: string, + commitObject: Commit, + parser: Parser, +): Promise { await parseTOMLWithRootToList( commitBody, commitObject, @@ -284,13 +326,18 @@ export async function parseDetails( if (sortedCategories.length === 0) { if (parser.leftOverCallback) { - parser.leftOverCallback(commitObject, commitMessage, commitBody, subMessages); + parser.leftOverCallback( + commitObject, + commitMessage, + commitBody, + subMessages, + ); } } else { sortedCategories.forEach((category) => { const subCategory = findSubCategory(commitBody, category); - category.changelogSection.get(subCategory).push({ + category.changelogSection?.get(subCategory)?.push({ commitMessage: commitMessage, commitObject: commitObject, subChangelogMessages: subMessages, @@ -317,7 +364,13 @@ async function expandDetailsLevel( async (item) => { // Nested Details if (Array.isArray(item)) { - await addDetailsLevel(commitBody, commitObject, item as unknown[], `${indentation}${indentationLevel}`, result); + await addDetailsLevel( + commitBody, + commitObject, + item as unknown[], + `${indentation}${indentationLevel}`, + result, + ); return; } let string = item as string; @@ -325,9 +378,19 @@ async function expandDetailsLevel( // Legacy Nested Details if (string.includes(detailsKey)) { - result.push(...(await expandDetailsLevel(string, commitObject, `${indentation}${indentationLevel}`))); + result.push( + ...(await expandDetailsLevel( + string, + commitObject, + `${indentation}${indentationLevel}`, + )), + ); } else { - result.push({ commitMessage: string, commitObject: commitObject, indentation: indentation }); + result.push({ + commitMessage: string, + commitObject: commitObject, + indentation: indentation, + }); } }, (root) => root[detailsRoot] as string, @@ -360,38 +423,43 @@ async function addDetailsLevel( } // Transform into String - let detailString: string; if (typeof detail !== "string") { - try { - detailString = detail.toString(); - } catch (e) { - error(dedent` - Failed parsing Detail \`${detail}\` of Details Level: + logError(dedent` + Failed parsing Detail \`${detail}\` of Details Level: + \`\`\` + ${details}\`\`\` + of commit object ${commitObject.hash} (${commitObject.message}). + The value is not a string.`); + + if (commitObject.body && commitBody !== commitObject.body) { + logError(dedent` + Original Body: \`\`\` - ${details}\`\`\` - of commit object ${commitObject.hash} (${commitObject.message}). - The value could not be converted into a string.`); - - if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` - Original Body: - \`\`\` - ${commitObject.body}\`\`\``); - } - - error(`\n${endMessage}\n`); - if (data.isTest) throw e; - continue; + ${commitObject.body}\`\`\``); } - } else detailString = detail as string; - detailString = dedent(detailString).trim(); + logError(`\n${endMessage}\n`); + if (data.isTest) throw new Error("Value is not a string."); + continue; + } + + const detailString = dedent(detail).trim(); // Legacy Nested Details if (detailString.includes(detailsKey)) { - builder.push(...(await expandDetailsLevel(detailString, commitObject, `${indentation}${indentationLevel}`))); + builder.push( + ...(await expandDetailsLevel( + detailString, + commitObject, + `${indentation}${indentationLevel}`, + )), + ); } else { - builder.push({ commitMessage: detailString, commitObject: commitObject, indentation: indentation }); + builder.push({ + commitMessage: detailString, + commitObject: commitObject, + indentation: indentation, + }); } } } @@ -399,7 +467,10 @@ async function addDetailsLevel( /** * Parses a commit with 'combine'. */ -export async function parseCombine(commitBody: string, commitObject: Commit): Promise { +export async function parseCombine( + commitBody: string, + commitObject: Commit, +): Promise { await parseTOMLWithRootToList( commitBody, commitObject, @@ -408,7 +479,7 @@ export async function parseCombine(commitBody: string, commitObject: Commit): Pr (item) => !item, async (item) => { if (!data.combineList.has(item)) data.combineList.set(item, []); - data.combineList.get(item).push(commitObject); + data.combineList.get(item)?.push(commitObject); }, (root) => root[combineRoot] as string, ); @@ -456,7 +527,7 @@ async function parseTOML( if (!itemKey) item = parseResult.data as T; else item = parseResult.data[itemKey]; } catch (e) { - error(dedent` + logError(dedent` Failed parsing TOML in body: \`\`\` ${commitBody}\`\`\` @@ -464,13 +535,13 @@ async function parseTOML( This could be because of invalid syntax.`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`\n${endMessage}\n`); + logError(`\n${endMessage}\n`); if (data.isTest) throw e; return undefined; } @@ -505,19 +576,19 @@ async function parseList( let index = i + 1; if (entryModifier) index = entryModifier(i); - error(dedent` + logError(dedent` Missing Requirements for entry ${index} of list with key '${listKey}' in body: \`\`\` ${commitBody}\`\`\` of commit object ${commitObject.hash} (${commitObject.message}).`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`${endMessage}\n`); + logError(`${endMessage}\n`); if (data.isTest) throw new Error("Bad Entry. See Above."); continue; @@ -548,19 +619,26 @@ async function parseTOMLWithRootToList( rootObjTransform?: (root: Record) => T, matterCallback?: (matter: GrayMatterFile) => void, ): Promise { - let root: Record; + let root: Record | undefined; const messages: T[] = []; const endMessage = getEndMessage(delimiter); // Parse Root TOML try { - root = await parseTOML>(commitBody, commitObject, delimiter, null, matterCallback); + root = await parseTOML>( + commitBody, + commitObject, + delimiter, + undefined, + matterCallback, + ); + if (!root) return; const rootObj = rootObjTransform ? rootObjTransform(root) : (root as T); // Only push root if it passes empty check if (rootObj && !emptyCheck(rootObj)) messages.push(rootObj); } catch (e) { - error(dedent` + logError(dedent` Failed parsing Root TOML in body: \`\`\` ${commitBody}\`\`\` @@ -568,13 +646,13 @@ async function parseTOMLWithRootToList( This could be because of invalid syntax.`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`\n${endMessage}\n`); + logError(`\n${endMessage}\n`); if (data.isTest) throw e; return undefined; } @@ -586,38 +664,38 @@ async function parseTOMLWithRootToList( return; } // No Valid Entry - error(dedent` + logError(dedent` Missing Requirements for root entry, & no list with list key '${listKey}' detected in body: \`\`\` ${commitBody}\`\`\` of commit object ${commitObject.hash} (${commitObject.message}).`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`${endMessage}\n`); + logError(`${endMessage}\n`); if (data.isTest) throw new Error("No Valid Entry. See Above."); } // Parse List TOML if (!root[listKey] || !Array.isArray(root[listKey])) { - error(dedent` + logError(dedent` List (key: '${listKey}') in body: \`\`\` ${commitBody}\`\`\` of commit object ${commitObject.hash} (${commitObject.message}) not a list, or does not exist.`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`${endMessage}\n`); + logError(`${endMessage}\n`); if (data.isTest) throw new Error("Failed Parsing List. See Above."); return; @@ -627,37 +705,37 @@ async function parseTOMLWithRootToList( try { list = root[listKey] as unknown as T[]; } catch (e) { - error(dedent` + logError(dedent` List (key: '${listKey}') in body: \`\`\` ${commitBody}\`\`\` of commit object ${commitObject.hash} (${commitObject.message}) could not be turned into correct list type.`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`${endMessage}\n`); + logError(`${endMessage}\n`); if (data.isTest) throw new Error("Failed Parsing List. See Above."); return; } if (list.length === 0) { - error(dedent` + logError(dedent` List (key: '${listKey}') in body: \`\`\` ${commitBody}\`\`\` of commit object ${commitObject.hash} (${commitObject.message}) is empty.`); if (commitObject.body && commitBody !== commitObject.body) { - error(dedent` + logError(dedent` Original Body: \`\`\` ${commitObject.body}\`\`\``); } - error(`${endMessage}\n`); + logError(`${endMessage}\n`); if (data.isTest) throw new Error("Failed Parsing List. See Above."); return; @@ -667,10 +745,28 @@ async function parseTOMLWithRootToList( messages.push(...list); // Because we've already done empty check on root obj, no need to suppress error msg // Keep as index (root: 0, obj1: 1, obj2: 2, ...) - await parseList(messages, listKey, commitBody, commitObject, endMessage, emptyCheck, perItemCallback, (i) => i); + await parseList( + messages, + listKey, + commitBody, + commitObject, + endMessage, + emptyCheck, + perItemCallback, + (i) => i, + ); } // Normal Parsing of List - else await parseList(list, listKey, commitBody, commitObject, endMessage, emptyCheck, perItemCallback); + else + await parseList( + list, + listKey, + commitBody, + commitObject, + endMessage, + emptyCheck, + perItemCallback, + ); } function getEndMessage(delimiter: string) { diff --git a/tools/tasks/checks/index.ts b/tools/tasks/checks/index.ts index e728c90..b4a8e0e 100644 --- a/tools/tasks/checks/index.ts +++ b/tools/tasks/checks/index.ts @@ -1,5 +1,5 @@ import gulp from "gulp"; -import { checkEnvironmentalVariables } from "../../util/util"; +import { checkEnvironmentalVariables } from "#utils/util.ts"; const vars = [ "GITHUB_TOKEN", @@ -18,7 +18,7 @@ const vars = [ async function checkEnv() { checkEnvironmentalVariables(vars); - if (!/.+\/.+/.exec(process.env.GITHUB_REPOSITORY)) { + if (!/.+\/.+/.exec(process.env.GITHUB_REPOSITORY ?? "")) { throw new Error("Malformed repository slug."); } } diff --git a/tools/tasks/client/index.ts b/tools/tasks/client/index.ts index db66581..f1c7499 100644 --- a/tools/tasks/client/index.ts +++ b/tools/tasks/client/index.ts @@ -1,19 +1,20 @@ -import gulp from "gulp"; -import { clientDestDirectory, modpackManifest, overridesFolder, sharedDestDirectory } from "../../globals"; +import gulp, { dest, symlink } from "gulp"; +import { + clientDestDirectory, + modpackManifest, + sharedDestDirectory, +} from "#globals"; import fs from "fs"; import upath from "upath"; -import buildConfig from "../../buildConfig"; -import rename from "gulp-rename"; -import imagemin from "gulp-imagemin"; -import pngToJpeg from "png-to-jpeg"; -import { MainMenuConfig } from "../../types/mainMenuConfig"; -import del from "del"; -import { createModList, ModFileInfo } from "../misc/createModList"; +import buildConfig from "#buildConfig"; +import { deleteAsync } from "del"; +import { createModList, ModFileInfo } from "../misc/createModList.ts"; import dedent from "dedent-js"; -import { cleanupVersion } from "../../util/util"; +import { cleanupVersion } from "#utils/util.ts"; +import filter from "gulp-filter"; async function clientCleanUp() { - return del(upath.join(clientDestDirectory, "*"), { force: true }); + return deleteAsync(upath.join(clientDestDirectory, "*"), { force: true }); } /** @@ -71,7 +72,9 @@ async function copyClientLicense() { * Copies the update notes file. */ function copyClientUpdateNotes() { - return gulp.src("../UPDATENOTES.md", { allowEmpty: true }).pipe(gulp.dest(clientDestDirectory)); + return gulp + .src("../UPDATENOTES.md", { allowEmpty: true }) + .pipe(gulp.dest(clientDestDirectory)); } /** @@ -80,16 +83,22 @@ function copyClientUpdateNotes() { function copyClientChangelog() { return gulp .src(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md")) - .pipe(gulp.dest(clientDestDirectory)); + .pipe(dest(clientDestDirectory)); } /** * Copies modpack overrides. */ function copyClientOverrides() { + const f = filter((f) => !f.isDirectory()); return gulp - .src(buildConfig.copyFromSharedClientGlobs, { nodir: true, cwd: sharedDestDirectory, allowEmpty: true }) - .pipe(gulp.symlink(upath.join(clientDestDirectory, "overrides"))); + .src(buildConfig.copyFromSharedClientGlobs, { + cwd: sharedDestDirectory, + allowEmpty: true, + resolveSymlinks: true, + }) + .pipe(f) + .pipe(symlink(upath.join(clientDestDirectory, "overrides"))); } /** @@ -179,7 +188,10 @@ async function fetchModList() { `; - return fs.promises.writeFile(upath.join(clientDestDirectory, "modlist.html"), formattedModList); + return fs.promises.writeFile( + upath.join(clientDestDirectory, "modlist.html"), + formattedModList, + ); } /** @@ -211,54 +223,6 @@ function getTickCross(bool: boolean): string { return '✖'; } -const bgImageNamespace = "minecraft"; -const bgImagePath = "textures/gui/title/background"; -const mainMenuConfigPath = "config/CustomMainMenu/mainmenu.json"; - -/** - * Minifies (converts to jpeg) main menu files so they don't take up 60% of the pack size. - */ -async function compressMainMenuImages() { - const mainMenuImages = []; - const bgImagePathReal = upath.join("resources", bgImageNamespace, bgImagePath); - - // Convert each slideshow image to 80% jpg. - await new Promise((resolve) => { - gulp - .src(upath.join(sharedDestDirectory, overridesFolder, bgImagePathReal, "**/*")) - .pipe(imagemin([pngToJpeg({ quality: buildConfig.screenshotsQuality })])) - .pipe( - rename((f) => { - // xd - f.extname = ".jpg"; - - // Ping back the file name so we don't have to scan the folder again. - mainMenuImages.push(`${f.basename}${f.extname}`); - }), - ) - .pipe(gulp.dest(upath.join(clientDestDirectory, overridesFolder, bgImagePathReal))) - .on("end", resolve); - }); - - if (mainMenuImages.length > 0) { - // Read the CustomMainMenu config and parse it. - const mainMenuConfig: MainMenuConfig = JSON.parse( - (await fs.promises.readFile(upath.join(clientDestDirectory, overridesFolder, mainMenuConfigPath))).toString(), - ); - - // Fill the config with image paths using the weird "namespace:path" scheme. - mainMenuConfig.other.background.slideshow.images = mainMenuImages.map( - (img) => bgImageNamespace + ":" + upath.join(bgImagePath, img), - ); - - // Write it back. - return fs.promises.writeFile( - upath.join(clientDestDirectory, overridesFolder, mainMenuConfigPath), - JSON.stringify(mainMenuConfig, null, " "), - ); - } -} - export default gulp.series( clientCleanUp, createClientDirs, @@ -269,5 +233,4 @@ export default gulp.series( copyClientChangelog, copyClientUpdateNotes, fetchModList, - compressMainMenuImages, ); diff --git a/tools/tasks/deploy/curseforge.ts b/tools/tasks/deploy/curseforge.ts index 1ca7d51..da5f324 100644 --- a/tools/tasks/deploy/curseforge.ts +++ b/tools/tasks/deploy/curseforge.ts @@ -1,17 +1,32 @@ -import { modpackManifest } from "../../globals"; +import { modpackManifest } from "#globals"; -import request from "requestretry"; import fs from "fs"; -import log from "fancy-log"; import upath from "upath"; -import buildConfig from "../../buildConfig"; -import { makeArtifactNameBody } from "../../util/util"; +import buildConfig from "#buildConfig"; +import { + getAxios, + isEnvVariableSet, + makeArtifactNameBody, +} from "#utils/util.ts"; import sanitize from "sanitize-filename"; import mustache from "mustache"; -import { DeployReleaseType, inputToDeployReleaseTypes } from "../../types/changelogTypes"; +import { + DeployReleaseType, + InputReleaseType, + inputToDeployReleaseTypes, +} from "#types/changelogTypes.ts"; +import logInfo from "#utils/log.ts"; +import { CurseForgeLegacyMCVersion } from "#types/curseForge.ts"; +import * as core from "@actions/core"; +import { AxiosRequestConfig } from "axios"; +import { filesize } from "filesize"; const CURSEFORGE_LEGACY_ENDPOINT = "https://minecraft.curseforge.com/"; -const variablesToCheck = ["CURSEFORGE_API_TOKEN", "CURSEFORGE_PROJECT_ID", "RELEASE_TYPE"]; +const variablesToCheck = [ + "CURSEFORGE_API_TOKEN", + "CURSEFORGE_PROJECT_ID", + "RELEASE_TYPE", +]; async function upload(files: { name: string; displayName: string }[]) { files.forEach((file) => { @@ -23,7 +38,9 @@ async function upload(files: { name: string; displayName: string }[]) { // Since we've built everything beforehand, the changelog must be available in the shared directory. let changelog = ( - await fs.promises.readFile(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG_CF.md")) + await fs.promises.readFile( + upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG_CF.md"), + ) ).toString(); changelog = mustache.render(changelog, { @@ -36,74 +53,104 @@ async function upload(files: { name: string; displayName: string }[]) { }; // Fetch the list of Minecraft versions from CurseForge. - log("Fetching CurseForge version manifest..."); - const versionsManifest = - (await request({ - uri: CURSEFORGE_LEGACY_ENDPOINT + "api/game/versions", + logInfo("Fetching CurseForge version manifest..."); + const versionsManifest: CurseForgeLegacyMCVersion[] | undefined = ( + await getAxios()({ + url: CURSEFORGE_LEGACY_ENDPOINT + "api/game/versions", + method: "get", headers: tokenHeaders, - method: "GET", - json: true, - fullResponse: false, - maxAttempts: 5, - })) || []; + responseType: "json", + }) + ).data; if (!versionsManifest) { throw new Error("Failed to fetch CurseForge version manifest."); } - const version = versionsManifest.find((m) => m.name == modpackManifest.minecraft.version); + const version = versionsManifest.find( + (m) => m.name == modpackManifest.minecraft.version, + ); if (!version) { - throw new Error(`Version ${modpackManifest.minecraft.version} not found on CurseForge.`); + throw new Error( + `Version ${modpackManifest.minecraft.version} not found on CurseForge.`, + ); } - let clientFileID: number | null; + const uploadedIDs: { filePath: string; displayName: string; id: number }[] = + []; + let parentID: number | undefined = undefined; - const releaseType: DeployReleaseType = inputToDeployReleaseTypes[process.env.RELEASE_TYPE]; + const releaseType: DeployReleaseType = + inputToDeployReleaseTypes[ + (process.env.RELEASE_TYPE ?? "Release") as InputReleaseType + ]; // Upload artifacts. for (const file of files) { - const options = { - uri: CURSEFORGE_LEGACY_ENDPOINT + `api/projects/${process.env.CURSEFORGE_PROJECT_ID}/upload-file`, - method: "POST", + const path = upath.join(buildConfig.buildDestinationDirectory, file.name); + const options: AxiosRequestConfig = { + url: + CURSEFORGE_LEGACY_ENDPOINT + + `api/projects/${process.env.CURSEFORGE_PROJECT_ID}/upload-file`, + method: "post", headers: { ...tokenHeaders, "Content-Type": "multipart/form-data", }, - formData: { + data: { metadata: JSON.stringify({ changelog: changelog, changelogType: "html", releaseType: releaseType ? releaseType.cfReleaseType : "release", - parentFileID: clientFileID ? clientFileID : undefined, - gameVersions: clientFileID ? undefined : [version.id], + parentFileID: parentID ? parentID : undefined, + gameVersions: parentID ? undefined : [version.id], displayName: file.displayName, }), - file: fs.createReadStream(upath.join(buildConfig.buildDestinationDirectory, file.name)), + file: fs.createReadStream(path), }, - json: true, - fullResponse: false, + responseType: "json", }; - log(`Uploading ${file.name} to CurseForge...` + (clientFileID ? `(child of ${clientFileID})` : "")); + logInfo( + `Uploading ${file.name} to CurseForge...` + + (parentID ? `(child of ${parentID})` : ""), + ); - const response = await request(options); + const response: { id: number } = (await getAxios()(options)).data; if (response && response.id) { - if (!clientFileID) { - clientFileID = response.id; + uploadedIDs.push({ filePath: path, displayName: file.displayName, id: response.id }); + if (!parentID) { + parentID = response.id; } } else { throw new Error(`Failed to upload ${file.name}: Invalid Response.`); } } + if (isEnvVariableSet("GITHUB_STEP_SUMMARY")) + await core.summary + .addHeading("Nomi-CEu CurseForge Deploy Summary:", 2) + .addTable([ + [ + { data: "File Name", header: true }, + { data: "File ID", header: true }, + { data: "File Size", header: true }, + ], + ...uploadedIDs.map((uploaded) => [ + uploaded.displayName, + uploaded.id.toString(), + filesize(fs.statSync(uploaded.filePath).size), + ]), + ]) + .write(); } /** * Uploads build artifacts to CurseForge. */ export async function deployCurseForge(): Promise { - /** + /* * Obligatory variable check. */ ["GITHUB_TAG", ...variablesToCheck].forEach((vari) => { @@ -112,15 +159,23 @@ export async function deployCurseForge(): Promise { } }); - const displayName = process.env.GITHUB_TAG; + const displayName = process.env.GITHUB_TAG ?? ""; const files = [ { - name: sanitize((makeArtifactNameBody(modpackManifest.name) + "-client.zip").toLowerCase()), + name: sanitize( + ( + makeArtifactNameBody(modpackManifest.name) + "-client.zip" + ).toLowerCase(), + ), displayName: displayName, }, { - name: sanitize((makeArtifactNameBody(modpackManifest.name) + "-server.zip").toLowerCase()), + name: sanitize( + ( + makeArtifactNameBody(modpackManifest.name) + "-server.zip" + ).toLowerCase(), + ), displayName: `${displayName}-server`, }, ]; diff --git a/tools/tasks/deploy/releases.ts b/tools/tasks/deploy/releases.ts index 784161b..69f41d9 100644 --- a/tools/tasks/deploy/releases.ts +++ b/tools/tasks/deploy/releases.ts @@ -1,16 +1,24 @@ -import { modpackManifest } from "../../globals"; +import { modpackManifest } from "#globals"; import fs from "fs"; import upath from "upath"; -import buildConfig from "../../buildConfig"; -import { makeArtifactNameBody } from "../../util/util"; -import Bluebird from "bluebird"; +import buildConfig from "#buildConfig"; +import { makeArtifactNameBody } from "#utils/util.ts"; import { Octokit } from "@octokit/rest"; import sanitize from "sanitize-filename"; import mustache from "mustache"; -import { DeployReleaseType, inputToDeployReleaseTypes } from "../../types/changelogTypes"; +import { + DeployReleaseType, + InputReleaseType, + inputToDeployReleaseTypes, +} from "#types/changelogTypes.ts"; -const variablesToCheck = ["GITHUB_TAG", "GITHUB_TOKEN", "GITHUB_REPOSITORY", "RELEASE_TYPE"]; +const variablesToCheck = [ + "GITHUB_TAG", + "GITHUB_TOKEN", + "GITHUB_REPOSITORY", + "RELEASE_TYPE", +]; /** * Uploads build artifacts to GitHub Releases. @@ -26,7 +34,9 @@ async function deployReleases(): Promise { }); const body = makeArtifactNameBody(modpackManifest.name); - const files = ["client", "server", "lang"].map((file) => sanitize(`${body}-${file}.zip`.toLowerCase())); + const files = ["client", "server", "lang"].map((file) => + sanitize(`${body}-${file}.zip`.toLowerCase()), + ); /** * Obligatory file check. @@ -42,7 +52,7 @@ async function deployReleases(): Promise { auth: process.env.GITHUB_TOKEN, }); - const parsedSlug = /(.+)\/(.+)/.exec(process.env.GITHUB_REPOSITORY); + const parsedSlug = /(.+)\/(.+)/.exec(process.env.GITHUB_REPOSITORY ?? ""); if (!parsedSlug) { throw new Error("No/malformed GitHub repository slug provided."); } @@ -53,15 +63,23 @@ async function deployReleases(): Promise { }; const tag = process.env.GITHUB_TAG; - const releaseType: DeployReleaseType = inputToDeployReleaseTypes[process.env.RELEASE_TYPE]; + const releaseType: DeployReleaseType = + inputToDeployReleaseTypes[ + (process.env.RELEASE_TYPE ?? "") as InputReleaseType + ]; const preRelease = releaseType ? releaseType.isPreRelease : false; // Since we've grabbed, or built, everything beforehand, the Changelog file should be in the build dir let changelog = ( - await fs.promises.readFile(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md")) + await fs.promises.readFile( + upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md"), + ) ).toString(); - changelog = mustache.render(changelog, { CENTER_ALIGN: 'align="center"', CF_REDIRECT: "" }); + changelog = mustache.render(changelog, { + CENTER_ALIGN: 'align="center"', + CF_REDIRECT: "", + }); // Create a release. const release = await octokit.repos.createRelease({ @@ -73,16 +91,20 @@ async function deployReleases(): Promise { }); // Upload artifacts. - await Bluebird.map(files, async (file) => { - await octokit.repos.uploadReleaseAsset({ - name: file, - release_id: release.data.id, - ...repo, + await Promise.all( + files.map(async (file) => { + return octokit.repos.uploadReleaseAsset({ + name: file, + release_id: release.data.id, + ...repo, - // Dumb workaround thanks to broken typings. - data: (await fs.promises.readFile(upath.join(buildConfig.buildDestinationDirectory, file))) as unknown as string, - }); - }); + // Dumb workaround thanks to broken typings. Data should accept buffers... + data: (await fs.promises.readFile( + upath.join(buildConfig.buildDestinationDirectory, file), + )) as unknown as string, + }); + }), + ); await octokit.repos.updateRelease({ release_id: release.data.id, diff --git a/tools/tasks/helpers/actionQBUtils.ts b/tools/tasks/helpers/actionQBUtils.ts new file mode 100644 index 0000000..a87c0b9 --- /dev/null +++ b/tools/tasks/helpers/actionQBUtils.ts @@ -0,0 +1,728 @@ +import { Icon, Quest, QuestBook, QuestVisibility } from "#types/bqQuestBook.ts"; +import { diff } from "just-diff"; +import { + Changed, + YesIgnoreNo, + QuestChange, + Replacements, + SavedPorter, + SpecialModifierHandler, +} from "#types/actionQBTypes.ts"; +import upath from "upath"; +import fs from "fs"; +import PortQBData from "./questPorting/portQBData.ts"; +import { input, select } from "@inquirer/prompts"; +import { + configFolder, + configOverridesFolder, + rootDirectory, + storageFolder, +} from "#globals"; +import logInfo, { logError, logWarn } from "#utils/log.ts"; +import colors from "colors"; +import { getUniqueToArray } from "#utils/util.ts"; +import sortKeys from "sort-keys"; +import lodash from "lodash"; + +let data: PortQBData; + +export const emptyQuestName = "Gap"; +export const emptyQuestDescription = + "Unused Gap Quest. Prevents Overriding Of IDs."; +export const emptyQuestVisibility: QuestVisibility = "HIDDEN"; +export const emptyQuestIconId = "minecraft:air"; +export const emptyQuestTaskId = "bq_standard:checkbox"; + +export const emptyQuest: Quest = { + "preRequisites:11": [], + "properties:10": { + "betterquesting:10": { + "autoclaim:1": 0, + "desc:8": "Unused Gap Quest. Prevents Overriding Of IDs.", + "globalshare:1": 0, + "icon:10": { + "Count:3": 0, + "Damage:2": 0, + "OreDict:8": "", + "id:8": "minecraft:air", + }, + "ignoresview:1": 0, + "ismain:1": 0, + "issilent:1": 1, + "lockedprogress:1": 0, + "name:8": "Gap", + "partysinglereward:1": 0, + "questlogic:8": "AND", + "repeat_relative:1": 1, + "repeattime:3": -1, + "simultaneous:1": 0, + "snd_complete:8": "minecraft:entity.player.levelup", + "snd_update:8": "minecraft:entity.player.levelup", + "tasklogic:8": "AND", + "visibility:8": "HIDDEN", + }, + }, + "questID:3": 0, + "rewards:9": {}, + "tasks:9": { + "0:10": { + "index:3": 0, + "taskID:8": "bq_standard:checkbox", + }, + }, +}; + +export const defaultPorter = { + savedQuestMap: [], + ignoreQuestsNormal: [], + ignoreQuestsExpert: [], + alwaysAskQuestsNormal: [], + alwaysAskQuestsExpert: [], +} as SavedPorter; + +/* Paths */ +export const cfgNormalPath = upath.join( + configFolder, + "betterquesting", + "DefaultQuests.json", +); +export const cfgExpertPath = upath.join( + configFolder, + "betterquesting", + "saved_quests", + "ExpertQuests.json", +); + +export const cfgOverrideNormalPath = upath.join( + configOverridesFolder, + "normal", + "betterquesting", + "DefaultQuests.json", +); +export const cfgOverrideExpertPath = upath.join( + configOverridesFolder, + "expert", + "betterquesting", + "DefaultQuests.json", +); + +export const savedQuestPorter = upath.join(storageFolder, "savedQBPorter.json"); + +const nomiCoinMatcher = /^nomilabs:nomicoin[0-9]*$/; + +export function setupUtils(dataIn: PortQBData): void { + data = dataIn; +} + +export function removeFormatting(input: string): string { + if (!input.includes("§")) return input; + + const builder: string[] = []; + for (let i = 0; i < input.length; i++) { + const char = input.charAt(i); + if (char === "§") { + i++; // Skip Next Character + continue; + } + builder.push(char); + } + return builder.join(""); +} + +export function stripRewards(quest: Quest, shouldCheck = false, log = false) { + for (const rewardKey of Object.keys(quest["rewards:9"])) { + const reward = quest["rewards:9"][rewardKey]; + if ( + !reward || + reward["rewardID:8"] !== "bq_standard:item" || + !reward["rewards:9"] + ) + continue; + + for (const itemKey of Object.keys(reward["rewards:9"])) { + const item: Icon = reward["rewards:9"][itemKey]; + if (item && item["id:8"] && nomiCoinMatcher.test(item["id:8"])) { + if (shouldCheck) + throw new Error( + `Expert Quest with ID ${quest["questID:3"]} has Nomi Coin Reward!`, + ); + if (log) + logWarn( + `Removing Nomi Coin Reward for Expert Quest with ID ${quest["questID:3"]}...`, + ); + delete reward["rewards:9"][itemKey]; + } + } + if (Object.keys(reward["rewards:9"]).length === 0) + delete quest["rewards:9"][rewardKey]; + else quest["rewards:9"][rewardKey] = reward; + } +} + +let cachedQuestByName: Map; + +/** + * Finds the corresponding quest on the qb to change, using the data cache. If object is not found in the data cache, asks the client questions to determine the quest. + * @param sourceId The id of the quest on the source qb. + * @param sourceQuest The Source Quest, if it is not just `data.currentIDsToQuests.get(sourceId)`. + * @return Returns the quest that is found, or undefined if the quest should be skipped. + */ +export async function findQuest( + sourceId: number, + sourceQuest?: Quest, +): Promise { + if (data.ignoreQuests.has(sourceId)) return undefined; + if (data.foundQuests.has(sourceId)) return data.foundQuests.get(sourceId); + + // If no source quest, default behaviour + if (!sourceQuest) sourceQuest = data.currentIDsToQuests.get(sourceId); + // If still no source quest, throw + if (!sourceQuest) + throw new Error( + `Request Find Quest for id ${sourceId}, which is not in IDs to Quests!`, + ); + + logInfo( + colors.magenta( + `Finding Corresponding Quest for Source Quest with ID ${sourceId} and Name ${name(sourceQuest)}...`, + ), + ); + + // Try Find by ID + const questById = data.toChangeIDsToQuests.get(sourceId); + if (questById && !isEmptyQuest(questById)) { + // Ask the client if the corresponding id on the corresponding qb is correct + const correctQuestById = await isRightQuest( + `Does the Corresponding Quest have ID ${sourceId} and Name ${name(questById)}?`, + ); + if (correctQuestById === "YES") { + logInfo("Using Quest..."); + await finalizeFoundQuest(sourceId, () => + data.foundQuests.set(sourceId, questById), + ); + return questById; + } + if (correctQuestById === "IGNORE") { + logInfo("Ignoring..."); + await finalizeFoundQuest(sourceId, () => data.ignoreQuests.add(sourceId)); + return undefined; + } + } + + // Generate Quest By Name if Needed + if (!cachedQuestByName) { + cachedQuestByName = new Map(); + [...data.toChangeIDsToQuests.values()].forEach((item) => + cachedQuestByName.set(removeFormatting(name(item)), item), + ); + } + + // Try Find by Name + const removeFormattedName = removeFormatting(name(sourceQuest)); + const questByName = cachedQuestByName.get(removeFormattedName); + if (questByName && !isEmptyQuest(questByName)) { + // Ask the client if the corresponding id on the corresponding qb is correct + const correctQuestByName = await isRightQuest( + `Does the Corresponding Quest have ID ${id(questByName)} and Name ${name(questByName)}?`, + ); + if (correctQuestByName === "YES") { + logInfo("Using Quest..."); + await finalizeFoundQuest(sourceId, () => + data.foundQuests.set(sourceId, questByName), + ); + return questByName; + } + if (correctQuestByName === "IGNORE") { + logInfo("Cancelling..."); + await finalizeFoundQuest(sourceId, () => data.ignoreQuests.add(sourceId)); + return undefined; + } + } + + // Finally, ask for the specific ID + let foundBySpecificID: YesIgnoreNo = "NO"; + let questBySpecificID: Quest | undefined = undefined; + while (foundBySpecificID === "NO") { + const specID = parseInt( + await input({ + message: + "Please Provide a Specific Quest ID to be used as the Corresponding Quest. Enter -1 to Skip/Cancel this Quest!", + validate: (value) => { + const numValue = parseInt(value); + if (numValue === -1) return true; // Allow Cancelling + if (isNaN(numValue) || numValue < 0) { + return "Please Enter a Number Value >= 0!"; + } + return true; + }, + }), + ); + if (specID === -1) { + logInfo("Cancelling..."); + foundBySpecificID = "IGNORE"; + break; + } + questBySpecificID = data.toChangeIDsToQuests.get(specID); + if (!questBySpecificID) { + logError(`${specID} is not a Quest ID in the Quest Book being Changed!`); + continue; + } + if (isEmptyQuest(questBySpecificID)) { + logError( + `${specID} is a Empty Quest! Enter -1 to Skip/Cancel this Quest, not the ID of an Empty Quest!`, + ); + continue; + } + foundBySpecificID = await isRightQuest( + `Are You Sure you Would Like to use Quest with ID ${specID} and Name ${name(questBySpecificID)}?`, + ); + } + + if (foundBySpecificID === "IGNORE" || !questBySpecificID) + await finalizeFoundQuest(sourceId, () => data.ignoreQuests.add(sourceId)); + else + await finalizeFoundQuest(sourceId, () => + data.foundQuests.set(sourceId, questBySpecificID), + ); + + return questBySpecificID; +} + +async function finalizeFoundQuest(sourceID: number, addToList: () => void) { + if (data.alwaysAskQuests.has(sourceID)) { + logInfo( + "This Quest is set to Ask Each Time. If this is not Desirable, Change this in the Saved Porter!", + ); + return; + } + const askEachTime = await booleanSelect( + "Should we Ask the Corresponding ID for this Quest Every Time?", + "Yes", + "No", + false, + ); + if (askEachTime) data.alwaysAskQuests.add(sourceID); + else addToList(); +} + +async function isRightQuest(message: string): Promise { + return (await select({ + message: message, + choices: [ + { + name: "Yes", + value: "YES", + }, + { + name: "No", + value: "NO", + }, + { + name: "Skip/Ignore this Quest", + value: "IGNORE", + }, + ], + })) as YesIgnoreNo; +} + +export async function booleanSelect( + message: string, + trueMsg = "Yes", + falseMsg = "No", + defaultTo = true, +): Promise { + return ( + await select({ + message: message, + choices: [ + { + name: trueMsg, + value: true, + }, + { + name: falseMsg, + value: false, + }, + ], + default: defaultTo, + }) + ).valueOf(); +} + +export function id(quest: Quest): number { + return quest["questID:3"]; +} + +export function name(quest: Quest): string { + return quest["properties:10"]["betterquesting:10"]["name:8"]; +} + +export function dependencies(quest: Quest): number[] { + return quest["preRequisites:11"]; +} + +/** + * Paths to Ignore in Quest Change Calculation. + * Prerequisites handled separately. + * Prerequisites Types handled by Prerequisites. + * Rewards not ported (too different across Quest Books) + **/ +const ignoreRootPaths = new Set([ + "preRequisites:11", + "preRequisiteTypes:7", + "rewards:9", +]); + +/** + * Special Handling in Modified. The Path that is added to the changes list should have -CUSTOM appended to the end, to distinguish this from other changes. + */ +const specialModifierHandlers: SpecialModifierHandler[] = [ + (old, current, changes) => { + const diff = getUniqueToArray( + old["preRequisites:11"], + current["preRequisites:11"], + ); + // Unique to old array: Removed + if (diff.arr1Unique.length > 0 || diff.arr2Unique.length > 0) { + changes.push({ + path: ["preRequisites-CUSTOM"], + op: "replace", + value: diff, + }); + } + }, +]; + +export function getChanged( + currentQuests: Quest[], + oldQuests: Quest[], +): Changed { + // i is current iter, j is old iter + let i = 0; + let j = 0; + const changed: Changed = { added: [], modified: [], removed: [] }; + while (i < currentQuests.length && j < oldQuests.length) { + const currentQuestID = id(currentQuests[i]); + const oldQuestID = id(oldQuests[j]); + if (currentQuestID == oldQuestID) { + let questDiff = diff(oldQuests[j], currentQuests[i]) as QuestChange[]; + if (questDiff.length !== 0) { + questDiff = questDiff.filter( + (change) => + typeof change.path[0] !== "string" || + !ignoreRootPaths.has(change.path[0]), + ); + for (const handler of specialModifierHandlers) { + handler(oldQuests[j], currentQuests[i], questDiff); + } + if (isEmptyQuest(currentQuests[i])) changed.removed.push(oldQuests[j]); + else + changed.modified.push({ + currentQuest: currentQuests[i], + oldQuest: oldQuests[j], + change: questDiff, + }); + } + i++; + j++; + continue; + } + if (!data.currentIDsToQuests.has(oldQuestID)) { + logWarn( + `A quest has been removed directly! (ID ${id(oldQuests[j])}, Name '${name( + oldQuests[j], + )}') This is NOT recommended! IDs may overlay in the future! Replace quests with empty ones instead!`, + ); + changed.removed.push(oldQuests[j]); + j++; + continue; + } + changed.added.push(currentQuests[i]); + i++; + } + if (i < currentQuests.length) { + changed.added.push(...currentQuests.slice(i)); + } else if (j < currentQuests.length) { + changed.removed.push(...currentQuests.slice(i)); + } + return changed; +} + +export function isEmptyQuest(quest: Quest): boolean { + return ( + questIsSilent(quest) && + emptyName(quest) && + emptyDesc(quest) && + emptyVisibility(quest) && + emptyIcon(quest) && + questHasNoRewards(quest) && + emptyTasks(quest) + ); +} + +function emptyName(quest: Quest): boolean { + const questName = name(quest); + return questName === emptyQuestName || !questName; +} + +function emptyDesc(quest: Quest): boolean { + const questDesc = quest["properties:10"]["betterquesting:10"]["desc:8"]; + return questDesc === emptyQuestDescription || !questDesc; +} + +function emptyVisibility(quest: Quest): boolean { + const questVisibility = + quest["properties:10"]["betterquesting:10"]["visibility:8"]; + return questVisibility === emptyQuestVisibility; +} + +function emptyIcon(quest: Quest): boolean { + const questIcon = quest["properties:10"]["betterquesting:10"]["icon:10"]; + return ( + !questIcon || questIcon["id:8"] === emptyQuestIconId || !questIcon["id:8"] + ); +} + +function questIsSilent(quest: Quest): boolean { + return quest["properties:10"]["betterquesting:10"]["issilent:1"] !== 0; +} + +function questHasNoRewards(quest: Quest): boolean { + return !quest["rewards:9"] || Object.keys(quest["rewards:9"]).length === 0; +} + +function emptyTasks(quest: Quest): boolean { + return ( + !quest["tasks:9"] || + Object.keys(quest["tasks:9"]).length === 0 || + (Object.keys(quest["tasks:9"]).length === 1 && + (!quest["tasks:9"]["0:10"] || + !quest["tasks:9"]["0:10"]["taskID:8"] || + quest["tasks:9"]["0:10"]["taskID:8"] === emptyQuestTaskId)) + ); +} + +export function stringifyQB(qb: QuestBook): string { + // Formatting Changes + const replacements: Replacements[] = [ + { + search: //g, + replacement: "\\u003e", + }, + { + search: /&/g, + replacement: "\\u0026", + }, + { + search: /=/g, + replacement: "\\u003d", + }, + { + search: /'/g, + replacement: "\\u0027", + }, + ]; + qb = sortKeysRecursiveIgnoreArray(qb, (key1, key2): number => { + const defaultVal = key2 < key1 ? 1 : -1; + + if (!key1.includes(":") || !key2.includes(":")) return defaultVal; + + const num1 = Number.parseInt(key1.split(":")[0]); + const num2 = Number.parseInt(key2.split(":")[0]); + + if (Number.isNaN(num1) || Number.isNaN(num2)) return defaultVal; + return num1 - num2; + }); + let parsed = JSON.stringify(qb, null, 2).replace( + /("[a-zA-Z_]+:[56]":\s)(-?[0-9]+)(,?)$/gm, + "$1$2.0$3", + ); // Add '.0' to any Float/Double Values that are Integers + + for (const replacement of replacements) { + parsed = parsed.replace(replacement.search, replacement.replacement); + } + return parsed; +} + +/** + * Use our own, instead of sortKeysRecursive, to ignore sorting of arrays. + */ +function sortKeysRecursiveIgnoreArray( + object: T, + compare: (a: string, b: string) => number, +): T { + const result = sortKeys(object as Record, { compare }) as T; + + // We can modify results, Object.Keys returns a static array + Object.keys(result).forEach(function (key) { + const current = lodash.get(result, key); + if (current) { + if (typeof current === "object") { + lodash.set(result, key, sortKeys(current, { compare })); + return; + } + } + }); + + return result; +} + +export async function save(toSave: QuestBook): Promise { + const save = await booleanSelect("Would you like to Save Changes?"); + if (!save) return; + + const shouldSavePorter = await booleanSelect( + "Would you like to Save the Quest Porter?", + ); + if (shouldSavePorter) await savePorter(); + + const parsed = stringifyQB(toSave); + + for (const path of data.outputPaths) { + await fs.promises.writeFile(upath.join(rootDirectory, path), parsed); + } + + logInfo(`Saved Files: ${data.outputPaths.join(", ")}!`); + logInfo( + colors.green( + colors.bold( + "Remember to import the JSON Files into your Instance to format them!", + ), + ), + ); +} + +async function savePorter() { + logInfo("Saving Porter..."); + + let porter: SavedPorter; + + // Keys of Porter Are Checked on Import + // Porter Definitely Has a Value for Each Key + if (!data.savedPorter) { + if (fs.existsSync(savedQuestPorter)) { + porter = await readFromPorter(false); + } else porter = defaultPorter; + } else porter = data.savedPorter; + + // Save Map + porter.savedQuestMap = []; + for (const sourceID of data.foundQuests.keys()) { + const sourceQuest = data.foundQuests.get(sourceID); + if (!sourceQuest) continue; + const targetID = id(sourceQuest); + + let normalID: number, expertID: number; + switch (data.type) { + case "NORMAL": + normalID = sourceID; + expertID = targetID; + break; + case "EXPERT": + normalID = targetID; + expertID = sourceID; + break; + } + + porter.savedQuestMap.push({ + normal: normalID, + expert: expertID, + }); + + porter.savedQuestMap.sort((a, b) => a.normal - b.normal); + } + + // Save Ignore + const ignoreArr = [...data.ignoreQuests]; + if (data.type === "NORMAL") porter.ignoreQuestsNormal = ignoreArr; + else porter.ignoreQuestsExpert = ignoreArr; + + // Save Always Ask + const alwaysAskArr = [...data.alwaysAskQuests]; + if (data.type === "NORMAL") porter.alwaysAskQuestsNormal = alwaysAskArr; + else porter.alwaysAskQuestsExpert = alwaysAskArr; + + // Write Porter to File + return fs.promises.writeFile( + savedQuestPorter, + JSON.stringify(porter, null, 2), + ); +} + +export async function readFromPorter( + replaceExisting: boolean, +): Promise { + const savedPorter = JSON.parse( + await fs.promises.readFile(savedQuestPorter, "utf-8"), + ) as SavedPorter; + + // Make Sure Porter has Every Key + for (const key of Object.keys(defaultPorter)) { + // @ts-expect-error Cannot use String as Key + if (!savedPorter[key]) savedPorter[key] = defaultPorter[key]; + } + + // Add in Map + if (replaceExisting) data.foundQuests.clear(); + for (const savedQuestPath of savedPorter.savedQuestMap) { + if ( + Number.isNaN(savedQuestPath.normal) || + Number.isNaN(savedQuestPath.expert) + ) + throw new Error("ID must be a number!"); + + let sourceID: number, targetID: number; + switch (data.type) { + case "NORMAL": + sourceID = savedQuestPath.normal; + targetID = savedQuestPath.expert; + break; + case "EXPERT": + sourceID = savedQuestPath.expert; + targetID = savedQuestPath.normal; + break; + } + + if (!data.currentIDsToQuests.has(sourceID)) + throw new Error("ID must be a valid quest!"); + const targetQuest = data.toChangeIDsToQuests.get(targetID); + if (!targetQuest) throw new Error("ID must be a valid quest!"); + + if (!data.foundQuests.has(sourceID)) + data.foundQuests.set(sourceID, targetQuest); + } + + // Ignore & Always Ask + data.ignoreQuests = addToOrReplaceSet( + replaceExisting, + data.type === "NORMAL" + ? savedPorter.ignoreQuestsNormal + : savedPorter.ignoreQuestsExpert, + data.ignoreQuests, + ); + data.alwaysAskQuests = addToOrReplaceSet( + replaceExisting, + data.type === "NORMAL" + ? savedPorter.alwaysAskQuestsNormal + : savedPorter.alwaysAskQuestsExpert, + data.alwaysAskQuests, + ); + + data.savedPorter = savedPorter; + return savedPorter; +} + +function addToOrReplaceSet( + replaceExisting: boolean, + array: T[], + set: Set, +): Set { + if (replaceExisting) return new Set(array); + + array.forEach((value) => set.add(value)); + return set; +} diff --git a/tools/tasks/helpers/questChecks/index.ts b/tools/tasks/helpers/questChecks/index.ts new file mode 100644 index 0000000..f802f2e --- /dev/null +++ b/tools/tasks/helpers/questChecks/index.ts @@ -0,0 +1,431 @@ +import { QuestBook } from "#types/bqQuestBook.ts"; +import fs from "fs"; +import { + cfgExpertPath, + cfgNormalPath, + cfgOverrideExpertPath, + cfgOverrideNormalPath, + emptyQuest, + id, + name, + stringifyQB, + stripRewards, +} from "#tasks/helpers/actionQBUtils.ts"; +import { input, select } from "@inquirer/prompts"; +import { SourceOption } from "#types/actionQBTypes.ts"; +import logInfo, { logWarn } from "#utils/log.ts"; +import upath from "upath"; +import { rootDirectory } from "#globals"; +import colors from "colors"; +import { isEnvVariableSet } from "#utils/util.ts"; +import * as core from "@actions/core"; +import lodash from "lodash"; + +const isAvailableForFormatting = /[0-9a-ek-or]/; + +export const check = async () => { + try { + await checkAndFix(true); + } catch (e) { + if (isEnvVariableSet("GITHUB_STEP_SUMMARY")) { + const summary = core.summary + .addHeading("Quest Book Format Error!", 2) + .addRaw( + "Run the below Command in your Local Clone to Format the Quest Book:", + true, + ) + .addCodeBlock("npm run gulp fixQB"); + + if (e instanceof Error) summary.addDetails("Details...", e.message); + + await summary.write(); + } + throw e; + } +}; +export const fix = () => checkAndFix(false); + +async function checkAndFix(shouldCheck: boolean) { + logInfo(colors.bold(`${shouldCheck ? "Checking" : "Fixing"} QB...`)); + let checkNormalQB: QuestBook; + let checkExpertQB: QuestBook; + + if (shouldCheck) { + const nml1 = await fs.promises.readFile( + upath.join(rootDirectory, cfgNormalPath), + "utf-8", + ); + const nml2 = await fs.promises.readFile( + upath.join(rootDirectory, cfgOverrideNormalPath), + "utf-8", + ); + if (nml1 !== nml2) throw new Error("Normal Quest Books are not the Same!"); + + const exp1 = await fs.promises.readFile( + upath.join(rootDirectory, cfgExpertPath), + "utf-8", + ); + const exp2 = await fs.promises.readFile( + upath.join(rootDirectory, cfgOverrideExpertPath), + "utf-8", + ); + if (exp1 !== exp2) throw new Error("Normal Quest Books are not the Same!"); + + checkNormalQB = JSON.parse(nml1) as QuestBook; + checkExpertQB = JSON.parse(exp1) as QuestBook; + } else { + const normalSrc = (await select({ + message: "Which version should we use, for the Normal Source File?", + choices: [ + { + name: "Main Config Dir", + value: "CFG" as SourceOption, + }, + { + name: "Config Overrides", + value: "CFG-OVERRIDE" as SourceOption, + }, + ], + })) as SourceOption; + + const expertSrc = (await select({ + message: "Which version should we use, for the Expert Source File?", + choices: [ + { + name: "Main Config Dir", + value: "CFG" as SourceOption, + }, + { + name: "Config Overrides", + value: "CFG-OVERRIDE" as SourceOption, + }, + ], + })) as SourceOption; + + checkNormalQB = JSON.parse( + await fs.promises.readFile( + upath.join( + rootDirectory, + normalSrc === "CFG" ? cfgNormalPath : cfgOverrideNormalPath, + ), + "utf-8", + ), + ); + + checkExpertQB = JSON.parse( + await fs.promises.readFile( + upath.join( + rootDirectory, + expertSrc === "CFG" ? cfgExpertPath : cfgOverrideExpertPath, + ), + "utf-8", + ), + ); + } + + logInfo(colors.bold("Processing Normal QB...")); + await checkAndFixQB(shouldCheck, checkNormalQB, false); + logInfo(colors.bold("Processing Expert QB...")); + await checkAndFixQB(shouldCheck, checkExpertQB, true); + + if (!shouldCheck) { + logInfo("Saving..."); + const normal = stringifyQB(checkNormalQB); + const expert = stringifyQB(checkExpertQB); + await Promise.all([ + fs.promises.writeFile(upath.join(rootDirectory, cfgNormalPath), normal), + fs.promises.writeFile( + upath.join(rootDirectory, cfgOverrideNormalPath), + normal, + ), + fs.promises.writeFile(upath.join(rootDirectory, cfgExpertPath), expert), + fs.promises.writeFile( + upath.join(rootDirectory, cfgOverrideExpertPath), + expert, + ), + ]); + } else logInfo(colors.green("Successful. No Formatting Errors!")); +} + +async function checkAndFixQB( + shouldCheck: boolean, + qb: QuestBook, + isExpert: boolean, +) { + let index = 0; + // Use if Should Check is false, so we don't modify the underlying object. + const newQB = shouldCheck + ? qb["questDatabase:9"] + : lodash.cloneDeep(qb["questDatabase:9"]); + + // Checks for Quests + logInfo("Checking Quests..."); + for (const questKey of Object.keys(qb["questDatabase:9"])) { + // Copy Quest if Should Check is false (So we don't modify the underlying object) + const quest = shouldCheck + ? qb["questDatabase:9"][questKey] + : { ...qb["questDatabase:9"][questKey] }; + + const foundID = id(quest); + + // Check for Missing Quests + while (foundID > index) { + if (shouldCheck) throw new Error(`Missing Quest at Index ${index}!`); + logWarn(`Adding Empty Quest at Index ${index}...`); + const newQuest = { ...emptyQuest }; + newQuest["questID:3"] = index; + newQB[`${index}:10`] = newQuest; + index++; + } + + index++; + + // Check Name Formatting + quest["properties:10"]["betterquesting:10"]["name:8"] = + stripOrThrowExcessFormatting( + shouldCheck, + name(quest), + foundID, + "Quest", + "Name", + ); + + // Check for Empty Descriptions (Trim first, might be a space) + if (!quest["properties:10"]["betterquesting:10"]["desc:8"].trim()) { + if (shouldCheck) + throw new Error(`Quest with ID ${foundID} has Empty Description!`); + + quest["properties:10"]["betterquesting:10"]["desc:8"] = await input({ + message: `Quest with ID ${foundID} and Name ${quest["properties:10"]["betterquesting:10"]["name:8"]} has an Empty Description! What should we Replace it With?`, + default: "No Description", + validate: (value) => Boolean(value.trim()), + }); + } + // Check Desc Formatting (Still check if after, as user may have entered dupe formatting) + quest["properties:10"]["betterquesting:10"]["desc:8"] = + stripOrThrowExcessFormatting( + shouldCheck, + quest["properties:10"]["betterquesting:10"]["desc:8"], + foundID, + "Quest", + "Description", + ); + + const trimmed = + quest["properties:10"]["betterquesting:10"]["desc:8"].trim(); + + // Check if Description is Trimmed (Still check if after, as user may have entered new lines) + if (quest["properties:10"]["betterquesting:10"]["desc:8"] !== trimmed) { + if (shouldCheck) + throw new Error( + `Quest with ID ${foundID} has Excess Spaces/New Lines in the Description!`, + ); + + logWarn(`Trimming Description of Quest with ID ${foundID}!`); + quest["properties:10"]["betterquesting:10"]["desc:8"] = trimmed; + } + + // Visibility Check + if ( + quest["properties:10"]["betterquesting:10"]["visibility:8"] === "NORMAL" + ) { + if (shouldCheck) + throw new Error(`Quest with ID ${foundID} has Visibility Normal!`); + + quest["properties:10"]["betterquesting:10"]["visibility:8"] = + await select({ + message: `Quest with ID ${foundID} has Visibility Normal! What should we Replace it With?`, + choices: [ + { + name: "Always", + value: "ALWAYS", + }, + { + name: "Chain", + value: "CHAIN", + }, + { + name: "Hidden", + value: "HIDDEN", + }, + { + name: "Unlocked", + value: "UNLOCKED", + }, + ], + }); + } + + // Check the Order of Prerequisites + const oldPrerequisites = shouldCheck + ? quest["preRequisites:11"] + : [...quest["preRequisites:11"]]; // Copy if Changing + + let rightOrder = true; + let prev: number = -1; // Smallest ID is 0 + for (let i = 0; i < oldPrerequisites.length; i++) { + const pre = oldPrerequisites[i]; + if (prev < pre) { + prev = pre; + continue; + } + if (prev === pre) { + if (shouldCheck) + throw new Error( + `Duplicate Prerequisites in Quest with ID ${foundID}!`, + ); + logWarn( + `Removing Duplicate Prerequisite in Quest with ID ${foundID}...`, + ); + quest["preRequisites:11"].splice(i, 1); + } + rightOrder = false; + break; + } + + // Sort Prerequisites if Needed + if (!rightOrder) { + if (shouldCheck) + throw new Error( + `Prerequisites in Quest with ID ${foundID} is in the Wrong Order!`, + ); + logWarn(`Sorting Prerequisites in Quest with ID ${foundID}...`); + + const types = quest["preRequisiteTypes:7"]; + if (!types) quest["preRequisites:11"].sort((a, b) => a - b); + else { + const preRequisites = new Map(); + quest["preRequisites:11"].forEach((pre, index) => + preRequisites.set(pre, types[index]), + ); + + quest["preRequisites:11"].sort((a, b) => a - b); + for (let i = 0; i < quest["preRequisites:11"].length; i++) { + types[i] = preRequisites.get(quest["preRequisites:11"][i]) ?? 0; + } + } + } + + // Check for Rewards that have Nomicoins + if (isExpert) stripRewards(quest, isExpert, true); + + if (!shouldCheck) newQB[`${foundID}:10`] = quest; + } + + // Check for Redundant Formatting in Quest Lines + logInfo("Checking Quest Lines..."); + for (const lineKey of Object.keys(qb["questLines:9"])) { + const line = qb["questLines:9"][lineKey]; + line["properties:10"]["betterquesting:10"]["name:8"] = + stripOrThrowExcessFormatting( + shouldCheck, + line["properties:10"]["betterquesting:10"]["name:8"], + line["lineID:3"], + "Quest Line", + "Name", + ); + line["properties:10"]["betterquesting:10"]["desc:8"] = + stripOrThrowExcessFormatting( + shouldCheck, + line["properties:10"]["betterquesting:10"]["desc:8"], + line["lineID:3"], + "Quest Line", + "Description", + ); + } + if (!shouldCheck) qb["questDatabase:9"] = newQB; + + logInfo("Checking Properties..."); + // Check Edit Mode + if (qb["questSettings:10"]["betterquesting:10"]["editmode:1"] !== 0) { + if (shouldCheck) throw new Error("Edit Mode is On!"); + logWarn("Turning off Edit Mode..."); + qb["questSettings:10"]["betterquesting:10"]["editmode:1"] = 0; + } +} + +function stripOrThrowExcessFormatting( + shouldCheck: boolean, + value: string, + id: number, + name: string, + key: string, +): string { + if (!value.includes("§")) return value; + + let builder: string[] = []; + + for (let i = 0; i < value.length; i++) { + const char = value.charAt(i); + + if (builder.at(-1) === "§") { + if (char === "f") { + if (shouldCheck) + throw new Error( + `${name} with ID ${id} at ${key} has Formatting Code 'f'!`, + ); + logWarn( + `Replacing Formatting Code 'f' with 'r' in ${name} with ID ${id} at ${key}...`, + ); + builder.push("r"); + continue; + } + + if (!isAvailableForFormatting.test(char)) { + if (shouldCheck) + throw new Error( + `${name} with ID ${id} at ${key} has Lone Formatting Signal!`, + ); + + logWarn( + `Removing Lone Formatting Signal in ${name} with ID ${id} at ${key}...`, + ); + + // Remove Last Element + builder = builder.slice(0, -1); + continue; + } + + // Start of String, Remove Formatting is NOT Needed + if (builder.length === 1 && char === "r") { + if (shouldCheck) + throw new Error( + `${name} with ID ${id} at ${key} has Redundant Formatting!`, + ); + + logWarn( + `Removing Redundant Formatting from ${name} with ID ${id} at ${key}...`, + ); + + // Remove Previous + builder = []; + continue; + } + builder.push(char); + continue; + } + + if (char === "§") { + // If two characters before was not § (if builder length < 2, `.at` returns undefined) + if (builder.at(-2) !== "§") { + builder.push(char); + continue; + } + + if (shouldCheck) + throw new Error( + `${name} with ID ${id} at ${key} has Redundant Formatting!`, + ); + + logWarn( + `Removing Redundant Formatting from ${name} with ID ${id} at ${key}...`, + ); + + // Remove Previous + builder = builder.slice(0, -2); + } + + builder.push(char); + } + return builder.join(""); +} diff --git a/tools/tasks/helpers/questPorting/index.ts b/tools/tasks/helpers/questPorting/index.ts new file mode 100644 index 0000000..7bf783b --- /dev/null +++ b/tools/tasks/helpers/questPorting/index.ts @@ -0,0 +1,104 @@ +import fs from "fs"; +import upath from "upath"; +import { rootDirectory } from "#globals"; +import { Quest, QuestBook, QuestLine } from "#types/bqQuestBook.ts"; +import { getFileAtRevision } from "#utils/util.ts"; +import { getChanged, id, save, setupUtils } from "../actionQBUtils.ts"; +import PortQBData from "./portQBData.ts"; +import { + additions, + modifications, + removals, + setupLogic, +} from "./portQBLogic.ts"; +import { setupModifications } from "./portQBModifications.ts"; +import logInfo, { logError } from "../../../utils/log.ts"; + +let data: PortQBData; + +export default async function portQBChanges(): Promise { + data = new PortQBData(); + await data.setup(); + setupLogic(data); + setupModifications(data); + setupUtils(data); + + const current = JSON.parse( + await fs.promises.readFile( + upath.join(rootDirectory, data.srcPath), + "utf-8", + ), + ) as QuestBook; + const old = JSON.parse( + await getFileAtRevision(data.srcPath, data.ref), + ) as QuestBook; + + const currentQuests = Object.values(current["questDatabase:9"]); + const oldQuests = Object.values(old["questDatabase:9"]); + + const toChange = JSON.parse( + await fs.promises.readFile( + upath.join(rootDirectory, data.srcPathToChange), + "utf-8", + ), + ) as QuestBook; + + const quests = Object.values(toChange["questDatabase:9"]); + + data.currentIDsToQuests = new Map( + currentQuests.map((quest) => [id(quest), quest]), + ); + data.toChangeIDsToQuests = new Map( + quests.map((quest) => [id(quest), quest]), + ); + + await data.readSavedPorter(); + + data.changed = getChanged(currentQuests, oldQuests); + const addedQuestIDs = data.changed.added.map((quest) => id(quest)); + const modifiedQuestIDs = data.changed.modified.map((mod) => id(mod.oldQuest)); + const removedQuestIDs = data.changed.removed.map((quest) => id(quest)); + logInfo(`Quests Added: [${addedQuestIDs.join(", ")}]`); + logInfo(`Quests Modified: [${modifiedQuestIDs.join(", ")}]`); + logInfo(`Quests Removed: [${removedQuestIDs.join(", ")}]`); + + if ( + addedQuestIDs.length === 0 && + modifiedQuestIDs.length === 0 && + removedQuestIDs.length === 0 + ) { + logError("Files are the Same! No Changes Detected! Exiting..."); + return; + } + + if (addedQuestIDs.length > 0) await additions(); + if (modifiedQuestIDs.length > 0) await modifications(); + if (removedQuestIDs.length > 0) { + // Set the Old IDs to Quests + data.oldIDsToQuests = new Map( + oldQuests.map((quest) => [id(quest), quest]), + ); + // Set the Quest Line Changeable + data.questLines = Object.values(toChange["questLines:9"]); + await removals(); + } + + // Save Quest Database + const obj = {} as { [key: string]: Quest }; + const iter = data.toChangeIDsToQuests.values(); + for (let i = 0; i < data.toChangeIDsToQuests.size; i++) { + obj[`${i}:10`] = iter.next().value; + } + toChange["questDatabase:9"] = obj; + + // Save Quest Lines, if Changed + if (data.questLines) { + const obj = {} as { [key: string]: QuestLine }; + for (let i = 0; i < data.questLines.length; i++) { + obj[`${i}:10`] = data.questLines[i]; + } + toChange["questLines:9"] = obj; + } + + return save(toChange); +} diff --git a/tools/tasks/helpers/questPorting/portQBData.ts b/tools/tasks/helpers/questPorting/portQBData.ts new file mode 100644 index 0000000..9bfa9da --- /dev/null +++ b/tools/tasks/helpers/questPorting/portQBData.ts @@ -0,0 +1,172 @@ +import { checkbox, input, select } from "@inquirer/prompts"; +import { + Changed, + PortingType, + SavedPorter, + SourceOption, +} from "#types/actionQBTypes.ts"; +import { + booleanSelect, + cfgExpertPath, + cfgNormalPath, + cfgOverrideExpertPath, + cfgOverrideNormalPath, + readFromPorter, + savedQuestPorter, +} from "../actionQBUtils.ts"; +import { Quest, QuestLine } from "#types/bqQuestBook.ts"; +import fs from "fs"; +import logInfo from "#utils/log.ts"; +import { modificationParsers } from "./portQBModifications.ts"; + +export default class PortQBData { + ref: string; + type: PortingType; + sourceOption: SourceOption; + srcPath: string; + srcPathToChange: string; + outputPaths: string[]; + + // Changed Maps b/w source qb and qb to change + changed: Changed; + + // Map of quest id to quest on the old source qb (Only used in Remove) + oldIDsToQuests?: Map; + + // Map of quest id to quest on the source qb + currentIDsToQuests: Map; + + // Map of quest id to quest on the qb to change + toChangeIDsToQuests: Map; + + // Set of Quest IDs on the source qb to ignore + ignoreQuests: Set; + + // Set of Quest IDs on the source qb to always ask + alwaysAskQuests: Set; + + // Map from quest id on the source qb to the quest obj on the qb to change + foundQuests: Map; + + // Quest Lines Changeable (Only used in Remove) + questLines?: QuestLine[]; + + // The Porter that was read from. + savedPorter?: SavedPorter; + + // Advanced Settings + modifyParsersIgnore: Set; + + /** + * Set some default values, so we don't have to deal with nullable values. + */ + constructor() { + this.ref = "main"; + this.type = "NORMAL"; + this.sourceOption = "CFG"; + this.srcPath = ""; + this.srcPathToChange = ""; + this.outputPaths = []; + + this.changed = { added: [], modified: [], removed: [] }; + + this.currentIDsToQuests = new Map(); + this.toChangeIDsToQuests = new Map(); + + this.ignoreQuests = new Set(); + this.foundQuests = new Map(); + this.alwaysAskQuests = new Set(); + + this.modifyParsersIgnore = new Set(); + } + + async setup(): Promise { + this.ref = await input({ + message: + "What Commit SHA, Tag OR Branch should we compare to? (Defaults to 'main')", + default: "main", + }); + + this.type = (await select({ + message: "How should we port?", + choices: [ + { + name: "Normal to Expert", + value: "NORMAL", + }, + { + name: "Expert to Normal", + value: "EXPERT", + }, + ], + })) as PortingType; + + this.sourceOption = (await select({ + message: + "Which version should we use, for both Source Files? (We need to check both Normal and Expert to Port!)", + choices: [ + { + name: "Main Config Dir", + value: "CFG" as SourceOption, + }, + { + name: "Config Overrides", + value: "CFG-OVERRIDE" as SourceOption, + }, + ], + })) as SourceOption; + + switch (this.type) { + case "NORMAL": + this.srcPath = + this.sourceOption === "CFG" ? cfgNormalPath : cfgOverrideNormalPath; + this.srcPathToChange = + this.sourceOption === "CFG" ? cfgExpertPath : cfgOverrideExpertPath; + this.outputPaths = [cfgExpertPath, cfgOverrideExpertPath]; + break; + case "EXPERT": + this.srcPath = + this.sourceOption === "CFG" ? cfgExpertPath : cfgOverrideExpertPath; + this.srcPathToChange = + this.sourceOption === "CFG" ? cfgNormalPath : cfgOverrideNormalPath; + this.outputPaths = [cfgExpertPath, cfgOverrideExpertPath]; + break; + } + + // If We Expand This to include a lot of Boolean Options, we can use https://github.com/Bartheleway/inquirer-table-multiple + if ( + await booleanSelect( + "Open Advanced Modification Settings?", + "Yes", + "No", + false, + ) + ) { + this.modifyParsersIgnore = new Set( + await checkbox({ + message: + "What Modification Parsers Should We Ignore, If Any? (Other Small Logic And Value Changes are Handled Separately)", + choices: modificationParsers.map((parser) => { + return { name: parser.name, value: parser.id }; + }), + required: false, + }), + ); + } + } + + async readSavedPorter(): Promise { + if (!fs.existsSync(savedQuestPorter)) return; + + if ( + !(await booleanSelect( + "Saved Quest Port Helper, Which Saves the ID Paths Between the Quest Books, is Available! Use it?", + )) + ) { + logInfo("Not Using..."); + return; + } + await readFromPorter(true); + return; + } +} diff --git a/tools/tasks/helpers/questPorting/portQBLogic.ts b/tools/tasks/helpers/questPorting/portQBLogic.ts new file mode 100644 index 0000000..8a59698 --- /dev/null +++ b/tools/tasks/helpers/questPorting/portQBLogic.ts @@ -0,0 +1,137 @@ +import PortQBData from "./portQBData.ts"; +import { + booleanSelect, + dependencies, + emptyQuest, + findQuest, + id, + name, + stripRewards, +} from "../actionQBUtils.ts"; +import { Quest } from "#types/bqQuestBook.ts"; +import { performModification } from "./portQBModifications.ts"; +import logInfo, { logNotImportant } from "../../../utils/log.ts"; + +let data: PortQBData; + +export function setupLogic(dataIn: PortQBData): void { + data = dataIn; +} + +export async function additions(): Promise { + if (!(await booleanSelect("Port Additions?"))) { + logNotImportant("Skipping..."); + return; + } + let newID = + [...data.toChangeIDsToQuests.keys()].sort((a, b) => a - b).pop() ?? 0; + const addingQuests: Quest[] = []; + logNotImportant("Porting Additions..."); + for (const addition of data.changed.added) { + if ( + !(await booleanSelect( + `Would you like to add Quest with ID ${id(addition)} and Name ${name(addition)}?`, + "Continue", + "Cancel", + )) + ) { + logInfo("Skipping..."); + continue; + } + + const addingID = ++newID; + logInfo(`Adding New Quest with ID ${addingID}...`); + + const newQuest = { ...addition } as Quest; // Copy Quest + newQuest["questID:3"] = addingID; + addingQuests.push(newQuest); + + // Add to Auto Quest Detection Map + data.foundQuests.set(id(addition), newQuest); + } + + // Sort out Dependencies (Do Afterwards, so if new quests dep on each other, that works) + if (addingQuests.length === 0) return; + for (const quest of addingQuests) { + logInfo( + `Modifying Deps for Quest with ID ${id(quest)} and Name ${name(quest)}...`, + ); + const deps = dependencies(quest); + const depTypes = quest["preRequisiteTypes:7"]; + const useDepTypes = depTypes && depTypes.length === deps.length; + + for (let i = 0; i < deps.length; i++) { + const depQuest = await findQuest(deps[i]); + if (!depQuest) { + deps.splice(i, 1); + if (useDepTypes) { + depTypes.splice(i, 1); + } + } else deps[i] = id(depQuest); + } + + // if we are porting TO expert, strip rewards + if (data.type === "NORMAL") { + logInfo("Stripping Rewards..."); + stripRewards(quest); + } + + // Push to Output + data.toChangeIDsToQuests.set(id(quest), quest); + } +} + +export async function modifications(): Promise { + if (!(await booleanSelect("Port Modifications?"))) { + logNotImportant("Skipping..."); + return; + } + logNotImportant("Porting Modifications..."); + for (const modified of data.changed.modified) { + await performModification(modified); + } +} + +export async function removals(): Promise { + if (!(await booleanSelect("Port Removals?"))) { + logNotImportant("Skipping..."); + return; + } + logNotImportant("Porting Removals..."); + for (const removal of data.changed.removed) { + if ( + !(await booleanSelect( + `Would you like to remove Quest with ID ${id(removal)} and Name ${name(removal)}?`, + "Continue", + "Cancel", + )) + ) { + logInfo("Skipping..."); + continue; + } + const quest = await findQuest( + id(removal), + data.oldIDsToQuests?.get(id(removal)), + ); + if (!quest) { + logInfo("Skipping, Could not find Corresponding Quest..."); + continue; + } + logInfo("Removing Quest..."); + const newId = id(quest); + + const newEmptyQuest = { ...emptyQuest } as Quest; // Copy Quest + newEmptyQuest["questID:3"] = newId; + data.toChangeIDsToQuests.set(newId, newEmptyQuest); + + // Remove quest from Quest Lines + if (data.questLines) { + for (const line of data.questLines) { + for (const key of Object.keys(line["quests:9"])) { + const questInfo = line["quests:9"][key]; + if (newId === questInfo["id:3"]) delete line["quests:9"][key]; + } + } + } + } +} diff --git a/tools/tasks/helpers/questPorting/portQBModifications.ts b/tools/tasks/helpers/questPorting/portQBModifications.ts new file mode 100644 index 0000000..e9c9333 --- /dev/null +++ b/tools/tasks/helpers/questPorting/portQBModifications.ts @@ -0,0 +1,901 @@ +import { + BunchedParserPath, + ChangeAndPath, + CustomDescriptionTaskTemplate, + DescriptionTaskChange, + LogicType, + Message, + Modified, + Parser, + QuestChange, + SimpleLogic, + TaskDifferentSolution, + YesIgnoreNo, +} from "#types/actionQBTypes.ts"; +import PortQBData from "./portQBData.ts"; +import DiffMatchPatch from "diff-match-patch"; +import picomatch from "picomatch"; +import { booleanSelect, findQuest, id, name } from "../actionQBUtils.ts"; +import fakeDiff from "fake-diff"; +import { Operation } from "just-diff"; +import logInfo, { logError, logNotImportant, logWarn } from "#utils/log.ts"; +import dedent from "dedent-js"; +import { confirm, editor, input, select } from "@inquirer/prompts"; +import colors from "colors"; +import { stringify } from "javascript-stringify"; +import { Quest, Task } from "#types/bqQuestBook.ts"; +import { ArrayUnique } from "#utils/util.ts"; +import lodash from "lodash"; + +let data: PortQBData; +const dmp = new DiffMatchPatch(); +const taskKey = "tasks"; + +export function setupModifications(dataIn: PortQBData): void { + data = dataIn; +} + +export async function performModification(modify: Modified): Promise { + const { formattedNames, callableFunctions } = findAllParsers(modify); + if (formattedNames.length === 0 || callableFunctions.length === 0) { + logNotImportant( + `All Modification Changes on this Quest with ID ${id(modify.currentQuest)} and Name ${name( + modify.currentQuest, + )} were Skipped.`, + ); + return; + } + + // Relying on the fact that the messages are sorted, condense duplicates. + const output: Message[] = []; + let lastMsg: string | undefined = undefined; + for (let i = 0; i < formattedNames.length; i++) { + if (i !== 0 && formattedNames[i] === lastMsg) { + output[i - 1].incrementRepeats(); + continue; + } + output.push(new Message(formattedNames[i])); + lastMsg = formattedNames[i]; + } + + if ( + !(await booleanSelect( + `Would you like to perform modifications on Quest with ID ${id(modify.currentQuest)} and Name ${name( + modify.currentQuest, + )}?\nChanges: ${output.map((msg) => msg.toFormattedString()).join(", ")}`, + )) + ) { + logNotImportant("Skipping..."); + return; + } + const quest = await findQuest(id(modify.currentQuest)); + if (!quest) { + logInfo("Skipping, Could not find Corresponding Quest..."); + return; + } + for (const func of callableFunctions) { + await func(quest); + } +} + +function getSimpleFormattedParserName( + parser: Parser, + logic: SimpleLogic, + path: string[], + op: Operation, +) { + if (!logic.formattedName) return `${parser.name} ${formatOp(op)}`; + return logic.formattedName(path, op); +} + +function formatOp(operation: Operation): string { + switch (operation) { + case "add": + return "Addition"; + + default: + case "replace": + return "Modification"; + + case "remove": + return "Removal"; + } +} + +function findAllParsers(modify: Modified): { + formattedNames: string[]; + callableFunctions: ((questToModify: Quest) => Promise)[]; +} { + const outputFunctions: ((questToModify: Quest) => Promise)[] = []; + const outputFormatted: string[] = []; + + const foundBuncableParsers = new Map(); + const foundSimpleParserIds = new Set(); + for (const change of modify.change) { + const pathList = (change.path as string[] | number[]).map( + (path: string | number): string => { + if (typeof path === "number") path = (path as number).toString(); + return path.split(":")[0]; + }, + ); + const path = pathList.join("/"); + + // Instead of filtering out ignored parsers before, we must check if the parser match is one that is ignored + // This is because otherwise the general parser would be called instead + for (const parser of modificationParsers) { + if (!parser.condition(path)) continue; + + // ID Checks and Handles + if (data.modifyParsersIgnore.has(parser.id)) { + logNotImportant( + `Skipping Change with Parser with id '${parser.id}'...`, + ); + break; + } + if (parser.logic.type === LogicType.Simple) { + if (foundSimpleParserIds.has(parser.id)) break; + if (parser.logic.applyOnce) foundSimpleParserIds.add(parser.id); + } + + // Simple Parser Logic + if (parser.logic.type === LogicType.Simple) { + outputFunctions.push( + async (quest) => + await (parser.logic as SimpleLogic).func( + quest, + modify, + change, + pathList, + ), + ); + outputFormatted.push( + getSimpleFormattedParserName( + parser, + parser.logic, + pathList, + change.op, + ), + ); + break; + } + + // Bunched Parser Logic + const changeAndPath: ChangeAndPath = { change: change, path: pathList }; + if (!foundBuncableParsers.has(parser.id)) { + foundBuncableParsers.set(parser.id, [ + { logic: parser.logic, changeAndPath: [changeAndPath] }, + ]); + break; + } + + let foundBunch = false; + for (const parserBunch of foundBuncableParsers.get(parser.id) ?? []) { + if ( + !parserBunch.logic.applyTogether( + parserBunch.changeAndPath[0].path, + pathList, + ) + ) + continue; + parserBunch.changeAndPath.push(changeAndPath); + foundBunch = true; + } + if (!foundBunch) { + foundBuncableParsers + .get(parser.id) + ?.push({ logic: parser.logic, changeAndPath: [changeAndPath] }); + } + break; + } + } + + // Change Bunched Parsers Into Function + for (const bunchList of foundBuncableParsers.values()) { + for (const bunch of bunchList) { + outputFunctions.push( + async (quest) => + await bunch.logic.func(quest, modify, bunch.changeAndPath), + ); + outputFormatted.push(...bunch.logic.formattedName(bunch.changeAndPath)); + } + } + + return { + formattedNames: outputFormatted.sort(), + callableFunctions: outputFunctions, + }; +} + +function assertIsModification(change: QuestChange) { + if (change.op !== "replace") + throw new Error(dedent` + Runtime Exception: Addition/Removal Should Not Happen Here! Report this to the Core Devs of Nomi-CEu! + Path: ${change.path.toString()} + `); +} + +const modifyDesc = async ( + questToModify: Quest, + modify: Modified, + change: QuestChange, +) => { + assertIsModification(change); + const oldQuest = + modify.oldQuest["properties:10"]["betterquesting:10"]["desc:8"]; + const newQuest = + modify.currentQuest["properties:10"]["betterquesting:10"]["desc:8"]; + const originalQuest = + questToModify["properties:10"]["betterquesting:10"]["desc:8"]; + + logInfo(colors.bold("Change in Source Quest:")); + console.log(fakeDiff(oldQuest, newQuest)); + const apply = dmp.patch_apply( + dmp.patch_make(oldQuest, newQuest), + originalQuest, + )[0]; + logInfo(colors.bold("If Applied:")); + console.log(fakeDiff(originalQuest, apply)); + logInfo(colors.bold("If Replaced:")); + console.log(fakeDiff(originalQuest, newQuest)); + + const applyMode = (await select({ + message: "How Should we Apply this Change to the Description?", + choices: [ + { name: "Apply Changes on top of Existing Description", value: "APPLY" }, + { name: "Replace Existing Description", value: "REPLACE" }, + { name: "Enter Own Description", value: "CUSTOM" }, + { name: "Ignore this Change", value: "IGNORE" }, + ], + })) as DescriptionTaskChange; + if (applyMode === "IGNORE") { + logInfo("Ignoring..."); + return; + } + + let description: string; + switch (applyMode) { + case "APPLY": + logInfo("Applying Description Change..."); + description = apply; + break; + case "REPLACE": + logInfo("Replacing Description..."); + description = newQuest; + break; + case "CUSTOM": + const template = (await select({ + message: "What Should the Original Text Be?", + choices: [ + { name: "Description with Changes Applied", value: "APPLY" }, + { name: "Description with Changes Replaced", value: "REPLACE" }, + { name: "Original Description", value: "ORIGINAL" }, + ], + })) as CustomDescriptionTaskTemplate; + const templateStr = + template === "APPLY" + ? apply + : template === "REPLACE" + ? newQuest + : originalQuest; + description = await editor({ + message: + "Enter your Custom Description. Enter an Empty String to Cancel!", + default: templateStr, + }); + if (!description) { + logInfo("Cancelling..."); + return; + } + break; + } + + questToModify["properties:10"]["betterquesting:10"]["desc:8"] = description; +}; + +const modifyIcon = async ( + questToModify: Quest, + modify: Modified, + change: QuestChange, +) => { + assertIsModification(change); + const oldIcon = + modify.oldQuest["properties:10"]["betterquesting:10"]["icon:10"]; + const newIcon = + modify.currentQuest["properties:10"]["betterquesting:10"]["icon:10"]; + const currentIcon = + questToModify["properties:10"]["betterquesting:10"]["icon:10"]; + + const newIconString = stringify(newIcon, null, 2) ?? ""; + + logInfo(colors.bold("Change in Source Quest:")); + console.log(fakeDiff(stringify(oldIcon, null, 2) ?? "", newIconString)); + logInfo(colors.bold("If Applied to Current Quest:")); + console.log(fakeDiff(stringify(currentIcon, null, 2) ?? "", newIconString)); + + if (!(await booleanSelect("Should we Apply This Icon Change?"))) { + logNotImportant("Skipping..."); + return; + } + + logInfo("Applying Icon Change..."); + questToModify["properties:10"]["betterquesting:10"]["icon:10"] = newIcon; +}; + +const modifyTasks = async ( + questToModify: Quest, + modify: Modified, + changeAndPaths: ChangeAndPath[], +) => { + logInfo("Performing Tasks Change..."); + const oldTasks = modify.oldQuest["tasks:9"]; + const newTasks = modify.currentQuest["tasks:9"]; + const currentTasks = questToModify["tasks:9"]; + + let same: boolean = true; + + let toModify: Map; + if (!lodash.isEqual(oldTasks, currentTasks)) { + logWarn( + "The Tasks Object in the Current Quest and the Original Source Quest is different!", + ); + logInfo(colors.bold("Change:")); + console.log( + fakeDiff( + stringify(Object.values(currentTasks), null, 2) ?? "", + stringify(Object.values(oldTasks), null, 2) ?? "", + ), + ); + + const solution = (await select({ + message: "What should we do?", + choices: [ + { + name: "Replace the Current Tasks with the Original Tasks", + value: "APPLY", + }, + { + name: "Continue without Replacing (MAY CAUSE PROBLEMS!)", + value: "CONTINUE", + }, + { + name: "Ignore this Change", + value: "IGNORE", + }, + ], + })) as TaskDifferentSolution; + + switch (solution) { + case "APPLY": + logInfo("Replacing..."); + toModify = new Map( + Object.values(oldTasks).map((task) => [task["index:3"], task]), + ); + break; + case "CONTINUE": + logWarn( + "Warning: Please Check the Context of each Change in the JSON File before Applying!", + ); + same = false; + break; + case "IGNORE": + logNotImportant("Skipping..."); + return; + } + } else { + if (!(await booleanSelect("Should we Apply Task Changes on this Quest?"))) { + logNotImportant("Skipping..."); + return; + } + } + + toModify ??= new Map( + Object.values(currentTasks).map((task) => [task["index:3"], task]), + ); + + // Sort Changes into Map of Index to Changes + const changes = new Map(); + changeAndPaths.forEach((change) => { + const index = getIndex(change.path, taskKey); + if (!changes.has(index)) changes.set(index, [change]); + else changes.get(index)?.push(change); + }); + + for (const entry of changes.entries()) { + const [index, changes] = entry; + + if (index < 0) + throw new Error("Invalid Path! Report to the Core Devs of Nomi-CEu!"); + + // Are we adding/removing a whole task? + if ( + changes.length === 1 && + isAddingOrRemovingComplexTask(changes[0].path) + ) { + let task: Task; + const change = changes[0]; + + if (change.change.op === "add") + task = newTasks[change.change.path.at(-1) ?? "0:10"]; + else { + const foundTask = toModify.get(index); + if (!foundTask) { + logError( + `Current Task Object does not Contain Index ${index}! Skipping...`, + ); + continue; + } + task = foundTask; + } + + const id = task["taskID:8"]; + + if ( + !(await booleanSelect( + `Should we ${change.change.op === "add" ? "Add" : "Remove"} Task No. ${index + 1} with ID ${id}?`, + )) + ) { + logNotImportant("Skipping..."); + continue; + } + + if (change.change.op === "add") { + const newIndex = same + ? index + : (lodash.max(Array.from(toModify.keys())) ?? 0) + 1; + + const newTask: Task = { ...task }; + if (!same) newTask["index:3"] = newIndex; + + logInfo(`Adding Task No. ${newIndex + 1} and ID ${id}...`); + toModify.set(newIndex, newTask); + } else { + logInfo(`Removing Task No. ${index + 1} and ID ${id}...`); + toModify.delete(index); + } + continue; + } + + // Modification of a Task + const oldTask = Object.values(oldTasks)[index]; + const newTask = Object.values(newTasks)[index]; + let task = toModify.get(index); + if (same) { + if (!task) { + throw new Error( + `Current Task Object does not Contain Index ${index}! Please Report this to the Core Devs of Nomi-CEu!`, + ); + } + logInfo(colors.bold("Change:")); + console.log( + fakeDiff( + stringify(task, null, 2) ?? "", + stringify(newTask, null, 2) ?? "", + ), + ); + if (!(await booleanSelect("Should we Apply this Change?"))) { + logNotImportant("Skipping..."); + continue; + } + logInfo("Applying Change..."); + toModify.set(index, { ...newTask }); + continue; + } + + let confirmedTask: Task | undefined = undefined; + let cancelled: boolean = false; + while (!confirmedTask) { + if (!task) { + const retrievedIndex = Number.parseInt( + await input({ + message: `Corresponding Index for Task with Index ${index} is Empty! Please enter the Corresponding Index: (-1 to Cancel/Ignore)`, + validate: (value) => { + const numValue = Number.parseInt(value); + if (numValue === -1) return true; // Allow Cancelling + if (isNaN(numValue) || numValue < 0) { + return "Please Enter a Number Value >= 0!"; + } + const foundTask = toModify.get(numValue); + if (!foundTask) { + return "Please Enter a Valid 0-Based Index!"; + } + return true; + }, + }), + ); + if (retrievedIndex === -1) { + logNotImportant("Skipping..."); + cancelled = true; + break; + } + task = toModify.get(retrievedIndex); + } + + if (!task) + throw new Error( + "Task is Undefined! This should not Happen! Report this to the Core Devs of Nomi-CEu!", + ); + + logInfo( + `Does Task with Index ${index} in Source Quest Correspond to Task with Index ${task["index:3"]} in the Target Quest?`, + ); + logInfo(colors.bold("Difference:")); + console.log( + fakeDiff( + stringify(oldTask, null, 2) ?? "", + stringify(task, null, 2) ?? "", + ), + ); + + const choice = (await select({ + message: "Is this Correct?", + choices: [ + { + name: "Yes", + value: "YES", + }, + { + name: "No", + value: "NO", + }, + { + name: "Ignore", + value: "IGNORE", + }, + ], + })) as YesIgnoreNo; + if (choice === "IGNORE") { + logNotImportant("Skipping..."); + cancelled = true; + break; + } + if (choice === "NO") { + logInfo("Please Enter the Correct Index Below."); + task = undefined; + continue; + } + confirmedTask = task; + } + if (cancelled) continue; + + const oldTaskString = stringify(oldTask, null, 2) ?? ""; + const newTaskString = stringify(newTask, null, 2) ?? ""; + const currentTaskString = stringify(confirmedTask, null, 2) ?? ""; + + logInfo(colors.bold("Change in Source Quest:")); + console.log(fakeDiff(oldTaskString, newTaskString)); + const apply = dmp.patch_apply( + dmp.patch_make(oldTaskString, newTaskString), + currentTaskString, + )[0]; + logInfo(colors.bold("If Applied:")); + console.log(fakeDiff(currentTaskString, apply)); + logInfo(colors.bold("If Replaced:")); + console.log(fakeDiff(currentTaskString, newTaskString)); + + const applyMode = (await select({ + message: "How Should we Apply this Task Change?", + choices: [ + { + name: "Apply Changes on top of Existing Task", + value: "APPLY", + }, + { name: "Replace Existing Task", value: "REPLACE" }, + { name: "Enter Own Task", value: "CUSTOM" }, + { name: "Ignore this Change", value: "IGNORE" }, + ], + })) as DescriptionTaskChange; + + if (applyMode === "IGNORE") { + logInfo("Ignoring..."); + return; + } + + let taskObj: Task | undefined; + switch (applyMode) { + case "APPLY": + logInfo("Applying Description Change..."); + try { + taskObj = JSON.parse(apply) as Task; + } catch (e) { + logWarn("Invalid JSON! Enter your own Below!"); + taskObj = await getCustomTasks( + currentTaskString, + newTaskString, + apply, + ); + } + break; + case "REPLACE": + logInfo("Replacing Description..."); + taskObj = { ...newTask }; + break; + case "CUSTOM": + taskObj = await getCustomTasks(currentTaskString, newTaskString, apply); + break; + } + if (!taskObj) continue; + logInfo("Performing Task Modification..."); + toModify.set(confirmedTask?.["index:3"] ?? 0, taskObj); + } + questToModify["tasks:9"] = {}; + for (const entry of toModify) { + questToModify["tasks:9"][`${entry[0]}:10`] = entry[1]; + } +}; + +async function getCustomTasks( + originalTask: string, + newTask: string, + apply: string, +): Promise { + let foundTask: Task | undefined = undefined; + + while (!foundTask) { + const template = (await select({ + message: "What Should the Default Text Be?", + choices: [ + { name: "Description with Changes Applied", value: "APPLY" }, + { name: "Description with Changes Replaced", value: "REPLACE" }, + { name: "Original Description", value: "ORIGINAL" }, + ], + })) as CustomDescriptionTaskTemplate; + const templateStr = + template === "APPLY" + ? apply + : template === "REPLACE" + ? newTask + : originalTask; + + const taskString = await editor({ + message: "Enter your Custom Task. Enter an Empty String to Cancel!", + default: templateStr, + }); + if (!taskString) { + logInfo("Cancelling..."); + return undefined; + } + try { + foundTask = JSON.parse(taskString) as Task; + } catch (e) { + logWarn("Invalid JSON!"); + foundTask = undefined; + } + } + return foundTask; +} + +const modifyPrerequisites = async ( + questToModify: Quest, + modify: Modified, + change: QuestChange, +) => { + logInfo("Performing Prerequisite Modifications..."); + + // Get Array Diff + const arrayDiff = change.value as ArrayUnique; + + const preRequisiteArrayCurrent = modify.currentQuest["preRequisites:11"]; + const preRequisiteTypeArrayCurrent = + modify.currentQuest["preRequisiteTypes:7"]; + + const preRequisiteArray = questToModify["preRequisites:11"]; + const preRequisiteTypeArray = questToModify["preRequisiteTypes:7"]; + + const preRequisites = new Map(); + + preRequisiteArray.forEach((pre, index) => + preRequisites.set( + pre, + preRequisiteTypeArray ? preRequisiteTypeArray[index] : 0, + ), + ); + + // Unique to Current: Added. + for (const added of arrayDiff.arr2Unique) { + const toAdd = await findQuest(added); + if (!toAdd) { + logInfo("Skipping, Could not find Corresponding Quest..."); + return; + } + if (preRequisites.has(id(toAdd))) { + logNotImportant("Quest Already Contains Added Prerequisite."); + return; + } + if ( + !(await booleanSelect( + `Should we Add Quest with ID ${id(toAdd)} and Name ${name(toAdd)} as a Prerequisite?`, + )) + ) { + logNotImportant("Skipping..."); + return; + } + logInfo("Adding Prerequisite..."); + const index = preRequisiteArrayCurrent.indexOf(added); + preRequisites.set( + id(toAdd), + index === -1 || !preRequisiteTypeArrayCurrent + ? 0 + : preRequisiteTypeArrayCurrent[index] ?? 0, + ); + } + + // Unique to Old: Removed. + for (const removed of arrayDiff.arr1Unique) { + const toRemove = await findQuest(removed); + if (!toRemove) { + logInfo("Skipping, Could not find Corresponding Quest..."); + return; + } + if (!preRequisites.has(id(toRemove))) { + logNotImportant("Quest Does Not Contain Removed Prerequisite."); + return; + } + if ( + !(await booleanSelect( + `Should we Remove Quest with ID ${id(toRemove)} and Name ${name(toRemove)} as a Prerequisite?`, + )) + ) { + logNotImportant("Skipping..."); + return; + } + logInfo("Removing Prerequisite..."); + preRequisites.delete(id(toRemove)); + } + + // Save + questToModify["preRequisites:11"] = Array.from(preRequisites.keys()).sort( + (a, b) => a - b, + ); + if ( + Array.from(preRequisites.values()).findIndex((value) => value !== 0) === -1 + ) + return; + const types: number[] = []; + for (let i = 0; i < questToModify["preRequisites:11"].length; i++) { + types[i] = preRequisites.get(questToModify["preRequisites:11"][i]) ?? 0; + } + questToModify["preRequisiteTypes:7"] = types; +}; + +const modifyGeneral = async ( + questToModify: Quest, + modify: Modified, + change: QuestChange, + path: string[], +): Promise => { + assertIsModification(change); + logInfo(`Change in '${path.pop()}':`); + + const newValue = lodash.get(modify.currentQuest, change.path); + const newValueAsString = stringify(newValue) ?? ""; + + logInfo(colors.bold("Change in Source Quest:")); + console.log( + fakeDiff( + stringify(lodash.get(modify.oldQuest, change.path)) ?? "", + newValueAsString, + ), + ); + logInfo(colors.bold("Change if Applied:")); + console.log( + fakeDiff( + stringify(lodash.get(questToModify, change.path)) ?? "", + newValueAsString, + ), + ); + + const shouldContinue = await confirm({ + message: "Would you like to apply the Change?", + }); + if (!shouldContinue) { + logNotImportant("Skipping..."); + return; + } + + logInfo("Applying Change..."); + lodash.set(questToModify, change.path, newValue); +}; + +function isAddingOrRemovingComplexTask(path: string[]): boolean { + return path.length === 2; +} + +function getIndex(path: string[], pathKey: string): number { + const index = path.indexOf(pathKey) + 1; + if (index == 0 || index >= path.length) return -1; // indexOf returns -1 if not found, +1 = 0 + const num = Number.parseInt(path[index]); + if (Number.isNaN(num)) return -1; + return num; +} + +function getFormattedNameWithIndex( + path: string[], + op: Operation, + pathKey: string, + baseName: string, +): string { + const defaultVal = `${baseName} ${formatOp(op)}`; + + if (op !== "replace") return defaultVal; + const index = getIndex(path, pathKey); + if (index === -1) return defaultVal; + + return `${baseName} No. ${index + 1} Modification`; +} + +export const modificationParsers = [ + { + id: "icon", + name: "Icon", + condition: picomatch("properties/betterquesting/icon/*"), + logic: { + type: LogicType.Simple, + applyOnce: true, + func: modifyIcon, + }, + }, + { + id: "desc", + name: "Description", + condition: picomatch("properties/betterquesting/desc"), + logic: { + type: LogicType.Simple, + applyOnce: true, + func: modifyDesc, + }, + }, + { + id: taskKey, + name: "Task", + condition: picomatch("tasks/**/*"), + logic: { + type: LogicType.Bunched, + applyTogether: () => true, + formattedName: (changes) => { + const result: string[] = []; + changes = lodash.uniqBy(changes, (change) => + getIndex(change.path, taskKey), + ); + + for (const change of changes) { + if ( + !isAddingOrRemovingComplexTask(change.path) && + change.change.op !== "replace" + ) + change.change.op = "replace"; + result.push( + getFormattedNameWithIndex( + change.path, + change.change.op, + taskKey, + "Task", + ), + ); + } + return result; + }, + func: modifyTasks, + }, + }, + { + id: "prerequisites", + name: "Prerequisite", + condition: picomatch("preRequisites-CUSTOM"), + logic: { + type: LogicType.Simple, + applyOnce: false, + func: modifyPrerequisites, + }, + }, + { + id: "general", + name: "General Changes", + condition: picomatch("**/*"), + logic: { + type: LogicType.Simple, + applyOnce: false, + formattedName: (path, op) => `'${path.at(-1)}' ${formatOp(op)}`, + func: modifyGeneral, + }, + }, +] as Parser[]; diff --git a/tools/tasks/lang/index.ts b/tools/tasks/lang/index.ts index 75612dd..b0c8f37 100644 --- a/tools/tasks/lang/index.ts +++ b/tools/tasks/lang/index.ts @@ -2,8 +2,12 @@ import gulp from "gulp"; import rename from "gulp-rename"; import merge from "merge-stream"; import upath from "upath"; -import buildConfig from "../../buildConfig"; -import { langDestDirectory, overridesFolder, sharedDestDirectory } from "../../globals"; +import buildConfig from "#buildConfig"; +import { + langDestDirectory, + overridesFolder, + sharedDestDirectory, +} from "#globals"; import fs from "fs"; /** @@ -16,9 +20,13 @@ async function createLangDirs() { } async function copyLang() { - const resourcesPath = upath.join(sharedDestDirectory, overridesFolder, "resources"); + const resourcesPath = upath.join( + sharedDestDirectory, + overridesFolder, + "resources", + ); - const opts = { nodir: true, base: resourcesPath }; + const opts = { base: resourcesPath, resolveSymlinks: true }; const streams = [ gulp.src(upath.join(resourcesPath, "pack.mcmeta"), opts), gulp.src(upath.join(resourcesPath, "**/*.lang"), opts).pipe( @@ -30,7 +38,11 @@ async function copyLang() { return await new Promise((resolve) => { merge(...streams) - .pipe(gulp.dest(upath.join(buildConfig.buildDestinationDirectory, langDestDirectory))) + .pipe( + gulp.dest( + upath.join(buildConfig.buildDestinationDirectory, langDestDirectory), + ), + ) .on("end", resolve); }); } diff --git a/tools/tasks/misc/createModList.ts b/tools/tasks/misc/createModList.ts index 3ddfac8..4d37aa2 100644 --- a/tools/tasks/misc/createModList.ts +++ b/tools/tasks/misc/createModList.ts @@ -1,9 +1,14 @@ -import log from "fancy-log"; -import { fetchFileInfo, fetchFilesBulk, fetchProject, fetchProjectsBulk } from "../../util/curseForgeAPI"; -import { modpackManifest } from "../../globals"; -import { checkGitTag, getFileAtRevision } from "../../util/util"; -import { ModpackManifest } from "../../types/modpackManifest"; -import { CurseForgeFileInfo, CurseForgeModInfo } from "../../types/curseForge"; +import { + fetchFileInfo, + fetchFilesBulk, + fetchProject, + fetchProjectsBulk, +} from "#utils/curseForgeAPI.ts"; +import { modpackManifest } from "#globals"; +import { checkGitTag, getFileAtRevision } from "#utils/util.ts"; +import { ModpackManifest } from "#types/modpackManifest.ts"; +import { CurseForgeFileInfo, CurseForgeModInfo } from "#types/curseForge.ts"; +import logInfo from "#utils/log.ts"; export interface ModFileInfo { modInfo: CurseForgeModInfo; @@ -16,13 +21,13 @@ export interface ModFileInfo { * Fetches mod links and builds a modlist. */ export async function createModList(tag = ""): Promise { - log("Fetching mod & file infos..."); + logInfo("Fetching mod & file infos..."); let manifest: ModpackManifest = modpackManifest; if (tag) { checkGitTag(tag); - manifest = JSON.parse(getFileAtRevision("manifest.json", tag)); + manifest = JSON.parse(await getFileAtRevision("manifest.json", tag)); } manifest.files.sort((a, b) => a.projectID - b.projectID); @@ -37,7 +42,7 @@ export async function createModList(tag = ""): Promise { .sort((a, b) => a.fileID - b.fileID), ); - log("Fetched Infos. Creating modlist..."); + logInfo("Fetched Infos. Creating modlist..."); // Create modlist const output: ModFileInfo[] = []; diff --git a/tools/tasks/misc/downloadMods.ts b/tools/tasks/misc/downloadMods.ts index 28ff223..fda6eda 100644 --- a/tools/tasks/misc/downloadMods.ts +++ b/tools/tasks/misc/downloadMods.ts @@ -1,13 +1,13 @@ -import { modDestDirectory, modpackManifest } from "../../globals"; -import { fetchMods } from "../../util/curseForgeAPI"; +import { modDestDirectory, modpackManifest } from "#globals"; +import { fetchMods } from "#utils/curseForgeAPI.ts"; import upath from "upath"; import fs from "fs"; -import log from "fancy-log"; -import del from "del"; +import { deleteAsync } from "del"; import gulp from "gulp"; +import logInfo from "#utils/log.ts"; async function modCleanUp() { - return del(upath.join(modDestDirectory, "*"), { force: true }); + return deleteAsync(upath.join(modDestDirectory, "*"), { force: true }); } /** @@ -16,11 +16,15 @@ async function modCleanUp() { async function createModDirs() { // This also makes the base dir, as it is recursive. if (!fs.existsSync(upath.join(modDestDirectory, "client"))) { - await fs.promises.mkdir(upath.join(modDestDirectory, "client"), { recursive: true }); + await fs.promises.mkdir(upath.join(modDestDirectory, "client"), { + recursive: true, + }); } if (!fs.existsSync(upath.join(modDestDirectory, "server"))) { - await fs.promises.mkdir(upath.join(modDestDirectory, "server"), { recursive: true }); + await fs.promises.mkdir(upath.join(modDestDirectory, "server"), { + recursive: true, + }); } } @@ -28,19 +32,19 @@ async function createModDirs() { * Downloads mods according to manifest.json and checks hashes. */ export async function downloadMods(): Promise { - log("Fetching Shared Mods..."); + logInfo("Fetching Shared Mods..."); await fetchMods( modpackManifest.files.filter((f) => !f.sides), modDestDirectory, ); - log("Fetching Client Mods..."); + logInfo("Fetching Client Mods..."); await fetchMods( modpackManifest.files.filter((f) => f.sides && f.sides.includes("client")), upath.join(modDestDirectory, "client"), ); - log("Fetching Server Mods..."); + logInfo("Fetching Server Mods..."); await fetchMods( modpackManifest.files.filter((f) => f.sides && f.sides.includes("server")), upath.join(modDestDirectory, "server"), diff --git a/tools/tasks/misc/gha.ts b/tools/tasks/misc/gha.ts index 914909d..02d109f 100644 --- a/tools/tasks/misc/gha.ts +++ b/tools/tasks/misc/gha.ts @@ -1,11 +1,11 @@ -import { modpackManifest } from "../../globals"; -import { makeArtifactNameBody } from "../../util/util"; +import { modpackManifest } from "#globals"; +import { makeArtifactNameBody } from "#utils/util.ts"; import sanitize from "sanitize-filename"; import { setOutput } from "@actions/core"; export async function makeArtifactNames(): Promise { const body = makeArtifactNameBody(modpackManifest.name); - const names = { + const names: Record = { client: body + "-client", server: body + "-server", lang: body + "-lang", diff --git a/tools/tasks/misc/pruneCache.ts b/tools/tasks/misc/pruneCache.ts index 44bed7b..1d07821 100644 --- a/tools/tasks/misc/pruneCache.ts +++ b/tools/tasks/misc/pruneCache.ts @@ -1,18 +1,13 @@ -import Bluebird from "bluebird"; -import { modpackManifest } from "../../globals"; -import { downloadOrRetrieveFileDef, getVersionManifest, libraryToPath } from "../../util/util"; +import { modpackManifest } from "#globals"; +import { FORGE_MAVEN, getForgeJar, getVersionManifest } from "#utils/util.ts"; import unzip from "unzipper"; -import { ForgeProfile } from "../../types/forgeProfile"; -import log from "fancy-log"; +import { ForgeProfile } from "#types/forgeProfile.ts"; import sha1 from "sha1"; -import { fetchFileInfo } from "../../util/curseForgeAPI"; -import { VersionManifest } from "../../types/versionManifest"; +import { fetchFileInfo } from "#utils/curseForgeAPI.ts"; import fs from "fs"; import upath from "upath"; -import buildConfig from "../../buildConfig"; - -const FORGE_VERSION_REG = /forge-(.+)/; -const FORGE_MAVEN = "https://files.minecraftforge.net/maven/"; +import buildConfig from "#buildConfig"; +import logInfo from "#utils/log.ts"; /** * Download the Forge jar. @@ -21,40 +16,12 @@ const FORGE_MAVEN = "https://files.minecraftforge.net/maven/"; * except we only download/fetch the Forge jar and enumerate the libraries it has. */ async function getForgeURLs() { - const minecraft = modpackManifest.minecraft; - - /** - * Break down the Forge version defined in manifest.json. - */ - const parsedForgeEntry = FORGE_VERSION_REG.exec( - (minecraft.modLoaders.find((x) => x.id && x.id.indexOf("forge") != -1) || {}).id || "", - ); - - if (!parsedForgeEntry) { - throw new Error("Malformed Forge version in manifest.json."); - } - - /** - * Transform Forge version into Maven library path. - */ - const forgeMavenLibrary = `net.minecraftforge:forge:${minecraft.version}-${parsedForgeEntry[1]}`; - const forgeInstallerPath = libraryToPath(forgeMavenLibrary) + "-installer.jar"; - - /** - * Fetch the Forge installer - */ - const forgeJar = await fs.promises.readFile( - ( - await downloadOrRetrieveFileDef({ - url: FORGE_MAVEN + forgeInstallerPath, - }) - ).cachePath, - ); + const { forgeJar, forgeInstallerPath } = await getForgeJar(); /** * Parse the profile manifest. */ - let forgeProfile: ForgeProfile; + let forgeProfile: ForgeProfile | undefined = undefined; const files = (await unzip.Open.buffer(forgeJar))?.files; if (!files) { @@ -75,9 +42,14 @@ async function getForgeURLs() { /** * Finally, fetch libraries. */ - const libraries = forgeProfile.libraries.filter((x) => Boolean(x?.downloads?.artifact?.url)); + const libraries = forgeProfile.libraries.filter((x) => + Boolean(x?.downloads?.artifact?.url), + ); - return [FORGE_MAVEN + forgeInstallerPath, ...libraries.map((library) => library.downloads.artifact.url)]; + return [ + FORGE_MAVEN + forgeInstallerPath, + ...libraries.map((library) => library.downloads.artifact.url), + ]; } /** @@ -90,13 +62,19 @@ export default async function pruneCache(): Promise { urls.push(...(await getForgeURLs()).map((url) => url)); // Fetch file infos. - const fileInfos = await Bluebird.map(modpackManifest.files, (file) => fetchFileInfo(file.projectID, file.fileID)); + const fileInfos = await Promise.all( + modpackManifest.files.map(async (file) => + fetchFileInfo(file.projectID, file.fileID), + ), + ); urls.push(...fileInfos.map((fileInfo) => fileInfo.downloadUrl)); // Fetch the Minecraft server. - const versionManifest: VersionManifest = await getVersionManifest(modpackManifest.minecraft.version); + const versionManifest = await getVersionManifest( + modpackManifest.minecraft.version, + ); if (!versionManifest) { - throw new Error(`No manifest found for Minecraft ${versionManifest.id}`); + throw new Error(`No manifest found for Minecraft ${versionManifest}`); } urls.push(versionManifest.downloads.server.url); @@ -105,11 +83,21 @@ export default async function pruneCache(): Promise { urls.push(...modpackManifest.externalDependencies.map((dep) => dep.url)); } - const cache = (await fs.promises.readdir(buildConfig.downloaderCacheDirectory)).filter((entity) => - fs.statSync(upath.join(buildConfig.downloaderCacheDirectory, entity)).isFile(), + const cache = ( + await fs.promises.readdir(buildConfig.downloaderCacheDirectory) + ).filter((entity) => + fs + .statSync(upath.join(buildConfig.downloaderCacheDirectory, entity)) + .isFile(), ); - const shaMap: { [key: string]: boolean } = urls.reduce((map, url) => ((map[sha1(url)] = true), map), {}); + const shaMap: { [key: string]: boolean } = urls.reduce( + (map: Record, url) => { + map[sha1(url)] = true; + return map; + }, + {}, + ); let count = 0, bytes = 0; @@ -122,12 +110,12 @@ export default async function pruneCache(): Promise { if (stat && stat.isFile()) { count += 1; bytes += stat.size; - log(`Pruning ${sha}...`); + logInfo(`Pruning ${sha}...`); await fs.promises.unlink(path); } } } - log(`Pruned ${count} files (${(bytes / 1024 / 1024).toFixed(3)} MiB)`); + logInfo(`Pruned ${count} files (${(bytes / 1024 / 1024).toFixed(3)} MiB)`); } diff --git a/tools/tasks/misc/transformFiles.ts b/tools/tasks/misc/transformFiles.ts index 71e9233..927e3d8 100644 --- a/tools/tasks/misc/transformFiles.ts +++ b/tools/tasks/misc/transformFiles.ts @@ -7,14 +7,14 @@ import { serverDestDirectory, sharedDestDirectory, templatesFolder, -} from "../../globals"; +} from "#globals"; import mustache from "mustache"; import gulp from "gulp"; import dedent from "dedent-js"; -import { isEnvVariableSet } from "../../util/util"; -import sortedStringify from "json-stable-stringify-without-jsonify"; -import { error } from "fancy-log"; -import { BuildData } from "../../types/transformFiles"; +import { isEnvVariableSet } from "#utils/util.ts"; +import { BuildData } from "#types/transformFiles.ts"; +import { logWarn } from "#utils/log.ts"; +import sortKeysRecursive from "sort-keys-recursive"; // This updates all the files, for a release. @@ -31,7 +31,9 @@ async function updateFilesSetup(): Promise { // See if current run is to update files if (isEnvVariableSet("UPDATE_FILES")) { try { - updateFiles = JSON.parse(process.env.UPDATE_FILES.toLowerCase()); + updateFiles = JSON.parse( + (process.env.UPDATE_FILES ?? "false").toLowerCase(), + ); } catch (err) { throw new Error("Update Files Env Variable set to Invalid Value."); } @@ -54,7 +56,9 @@ async function updateFilesSetup(): Promise { updateFileTransformedVersion = buildData.transformedVersion; return; } - error("Version.txt does not exist. Creating empty file. This may be an error."); + logWarn( + "Version.txt does not exist. Creating empty file. This may be an error.", + ); // Create Versions.txt fs.closeSync(fs.openSync(versionsFilePath, "w")); @@ -106,7 +110,9 @@ export async function updateBuildServerProperties(): Promise { // Replacement Object const replacementObject: Record = { - versionTitle: updateFiles ? updateFileTransformedVersion : buildData.transformedVersion, + versionTitle: updateFiles + ? updateFileTransformedVersion + : buildData.transformedVersion, }; // Read and Write paths for normal @@ -121,7 +127,12 @@ export async function updateBuildServerProperties(): Promise { // Read and Write paths for expert const readPathExpert: string = upath.join(templatesFolder, fileNameExpert); - const writePathExpert: string = upath.join(serverDestDirectory, "config-overrides", "expert", fileName); + const writePathExpert: string = upath.join( + serverDestDirectory, + "config-overrides", + "expert", + fileName, + ); // Modify Expert File await modifyFile(readPathExpert, [writePathExpert], replacementObject, false); @@ -140,7 +151,9 @@ export async function updateBuildRandomPatches(): Promise { // Replacement object const replacementObject: Record = { - versionTitle: updateFiles ? updateFileTransformedVersion : buildData.transformedVersion, + versionTitle: updateFiles + ? updateFileTransformedVersion + : buildData.transformedVersion, mode: "Normal", }; @@ -149,7 +162,12 @@ export async function updateBuildRandomPatches(): Promise { // Change values for Expert Config replacementObject["mode"] = "Expert"; - const writePathExpert = upath.join(sharedDestDirectory, configOverridesFolder, "expert", fileName); + const writePathExpert = upath.join( + sharedDestDirectory, + configOverridesFolder, + "expert", + fileName, + ); // Modify Expert File await modifyFile(readPath, [writePathExpert], replacementObject, false); @@ -194,7 +212,10 @@ async function updateIssueTemplates(): Promise { const versionsFilePath: string = upath.join(templatesFolder, "versions.txt"); - let versionList: string = await fs.promises.readFile(versionsFilePath, "utf8"); + let versionList: string = await fs.promises.readFile( + versionsFilePath, + "utf8", + ); if (!updateFiles) { if (!buildData.isVersionBuild()) @@ -213,7 +234,11 @@ async function updateIssueTemplates(): Promise { // Write updated Version List await fs.promises.writeFile(versionsFilePath, versionList); - const issueTemplatesFolder: string = upath.join(rootDirectory, ".github", "ISSUE_TEMPLATE"); + const issueTemplatesFolder: string = upath.join( + rootDirectory, + ".github", + "ISSUE_TEMPLATE", + ); // Write to issue templates for (const fileName of fileNames) { @@ -234,7 +259,9 @@ async function updateRandomPatchesConfig(): Promise { // Replacement object const replacementObject: Record = { - versionTitle: updateFiles ? updateFileTransformedVersion : buildData.transformedVersion, + versionTitle: updateFiles + ? updateFileTransformedVersion + : buildData.transformedVersion, mode: "Normal", }; @@ -243,7 +270,12 @@ async function updateRandomPatchesConfig(): Promise { // Change values for Expert Config replacementObject["mode"] = "Expert"; - const writePathExpert = upath.join(rootDirectory, configOverridesFolder, "expert", fileName); + const writePathExpert = upath.join( + rootDirectory, + configOverridesFolder, + "expert", + fileName, + ); // Modify Expert File await modifyFile(readPath, [writePathExpert], replacementObject); @@ -261,7 +293,9 @@ async function updateServerProperties(): Promise { // Replacement Object const replacementObject: Record = { - versionTitle: updateFiles ? updateFileTransformedVersion : buildData.transformedVersion, + versionTitle: updateFiles + ? updateFileTransformedVersion + : buildData.transformedVersion, }; // Read and Write paths for normal @@ -276,7 +310,12 @@ async function updateServerProperties(): Promise { // Read and Write paths for expert const readPathExpert: string = upath.join(templatesFolder, fileNameExpert); - const writePathExpert: string = upath.join(rootDirectory, configOverridesFolder, "expert", fileName); + const writePathExpert: string = upath.join( + rootDirectory, + configOverridesFolder, + "expert", + fileName, + ); // Modify Expert File await modifyFile(readPathExpert, [writePathExpert], replacementObject); @@ -286,7 +325,12 @@ async function updateMainMenuConfig(): Promise { // Filename & paths const fileName = "mainmenu.json"; const readPath: string = upath.join(templatesFolder, fileName); - const writePath: string = upath.join(rootDirectory, configFolder, "CustomMainMenu", fileName); + const writePath: string = upath.join( + rootDirectory, + configFolder, + "CustomMainMenu", + fileName, + ); if (!updateFiles && !buildData.isVersionBuild()) throw new Error( @@ -302,20 +346,38 @@ async function updateMainMenuConfig(): Promise { const data: string = await fs.promises.readFile(readPath, "utf8"); // Moustache Render - const modifiedData = JSON.parse(mustache.render(data, replacementObject)); + let modifiedData = JSON.parse(mustache.render(data, replacementObject)); // Add warning to not edit file modifiedData["_comment"] = "DO NOT EDIT THIS FILE! EDIT THE TEMPlATES INSTEAD! See https://github.com/Nomi-CEu/Nomi-CEu/wiki/Part-1:-Contributing-Information#section-5-template-information!"; // Sort keys so that comment appears first - return await fs.promises.writeFile(writePath, sortedStringify(modifiedData, { space: 2 }), "utf8"); + modifiedData = sortKeysRecursive(modifiedData); + + return await fs.promises.writeFile( + writePath, + JSON.stringify(modifiedData, null, 2), + "utf8", + ); } -export const updateFilesIssue = gulp.series(updateFilesSetup, updateIssueTemplates); -export const updateFilesRandomPatches = gulp.series(updateFilesSetup, updateRandomPatchesConfig); -export const updateFilesServer = gulp.series(updateFilesSetup, updateServerProperties); -export const updateFilesMainMenu = gulp.series(updateFilesSetup, updateMainMenuConfig); +export const updateFilesIssue = gulp.series( + updateFilesSetup, + updateIssueTemplates, +); +export const updateFilesRandomPatches = gulp.series( + updateFilesSetup, + updateRandomPatchesConfig, +); +export const updateFilesServer = gulp.series( + updateFilesSetup, + updateServerProperties, +); +export const updateFilesMainMenu = gulp.series( + updateFilesSetup, + updateMainMenuConfig, +); export const updateAll = gulp.series( updateFilesSetup, diff --git a/tools/tasks/misc/webhook.ts b/tools/tasks/misc/webhook.ts deleted file mode 100644 index f0d420f..0000000 --- a/tools/tasks/misc/webhook.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { MessageBuilder, Webhook } from "discord-webhook-node"; -import buildConfig from "../../buildConfig"; -import { checkEnvironmentalVariables } from "../../util/util"; - -export default async function fireNightlyWebhook(): Promise { - checkEnvironmentalVariables(["DISCORD_WEBHOOK", "GITHUB_RUN_ID", "GITHUB_SHA"]); - - const webhook = new Webhook(process.env.DISCORD_WEBHOOK); - - if (buildConfig.nightlyHookName) { - webhook.setUsername(buildConfig.nightlyHookName); - } - - if (buildConfig.nightlyHookAvatar) { - webhook.setAvatar(buildConfig.nightlyHookAvatar); - } - - const link = `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; - - const embed = new MessageBuilder() - .setTitle(`New snapshot available! (**${process.env.GITHUB_SHA.substr(0, 7)}**)`) - .setDescription(`Click to [view on GitHub Actions](${link}).`); - - return webhook.send(embed); -} diff --git a/tools/tasks/misc/zip.ts b/tools/tasks/misc/zip.ts index 76519ab..94588a1 100644 --- a/tools/tasks/misc/zip.ts +++ b/tools/tasks/misc/zip.ts @@ -4,18 +4,20 @@ import { mmcDestDirectory, modpackManifest, serverDestDirectory, -} from "../../globals"; +} from "#globals"; import upath from "upath"; import zip from "gulp-zip"; -import gulp from "gulp"; -import buildConfig from "../../buildConfig"; -import { makeArtifactNameBody } from "../../util/util"; +import gulp, { src } from "gulp"; +import buildConfig from "#buildConfig"; +import { makeArtifactNameBody } from "#utils/util.ts"; import sanitize from "sanitize-filename"; -async function zipFolder(path: string, zipName: string = upath.basename(path) + ".zip"): Promise { +async function zipFolder( + path: string, + zipName: string = upath.basename(path) + ".zip", +): Promise { return new Promise((resolve) => { - gulp - .src(upath.join(path, "**"), { nodir: true, base: path, dot: true }) + src(upath.join(path, "**"), { base: path, dot: true }) .pipe(zip(zipName)) .pipe(gulp.dest(buildConfig.buildDestinationDirectory)) .on("end", resolve); @@ -26,7 +28,11 @@ function makeZipper(src: string, artifactName: string) { const zipFn = () => { return zipFolder( upath.join(src), - sanitize((makeArtifactNameBody(modpackManifest.name) + `-${artifactName}.zip`).toLowerCase()), + sanitize( + ( + makeArtifactNameBody(modpackManifest.name) + `-${artifactName}.zip` + ).toLowerCase(), + ), ); }; diff --git a/tools/tasks/mmc/index.ts b/tools/tasks/mmc/index.ts index b40e5b7..aeb0c93 100644 --- a/tools/tasks/mmc/index.ts +++ b/tools/tasks/mmc/index.ts @@ -1,38 +1,39 @@ -import { clientDestDirectory, mmcDestDirectory, modDestDirectory, modpackManifest } from "../../globals"; -import { fetchMods } from "../../util/curseForgeAPI"; +import { + clientDestDirectory, + mmcDestDirectory, + modDestDirectory, + modpackManifest, +} from "#globals"; import * as upath from "upath"; -import { series, src, symlink } from "gulp"; import * as fs from "fs"; -import gulp from "gulp"; -import buildConfig from "../../buildConfig"; +import gulp, { series, src, symlink } from "gulp"; +import buildConfig from "#buildConfig"; +import filter from "gulp-filter"; -async function mmcCleanUp(cb) { +async function mmcCleanUp() { if (fs.existsSync(mmcDestDirectory)) { await fs.promises.rm(mmcDestDirectory, { recursive: true }); } - - cb(); } /** * Checks and creates all necessary directories so we can build the MMC zip safely. */ -async function createMMCDirs(cb) { +async function createMMCDirs() { if (!fs.existsSync(mmcDestDirectory)) { await fs.promises.mkdir(mmcDestDirectory, { recursive: true }); } - - cb(); } /** * Copies the update notes file. */ function copyMMCUpdateNotes() { - return gulp.src("../UPDATENOTES.md", { allowEmpty: true }).pipe(gulp.dest(mmcDestDirectory)); + return gulp + .src("../UPDATENOTES.md", { allowEmpty: true }) + .pipe(gulp.dest(mmcDestDirectory)); } - /** * Copies the license file. */ @@ -44,24 +45,31 @@ async function copyMMCLicense() { * Copies the changelog file. */ function copyMMCChangelog() { - return gulp.src(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md")).pipe(gulp.dest(mmcDestDirectory)); + return gulp + .src(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md")) + .pipe(gulp.dest(mmcDestDirectory)); } /** * Copies modpack overrides. */ function copyOverrides() { + const f = filter((f) => !f.isDirectory()); return src(upath.join(clientDestDirectory, "**/*"), { - nodir: true, resolveSymlinks: false, - }).pipe(symlink(upath.join(mmcDestDirectory))); + }) + .pipe(f) + .pipe(symlink(upath.join(mmcDestDirectory))); } /** * Renames copied overrides to '.minecraft'. */ async function renameOverrides() { - await fs.promises.rename(upath.join(mmcDestDirectory, "overrides"), upath.join(mmcDestDirectory, ".minecraft")); + await fs.promises.rename( + upath.join(mmcDestDirectory, "overrides"), + upath.join(mmcDestDirectory, ".minecraft"), + ); return fs.promises.rm(upath.join(mmcDestDirectory, "manifest.json")); } @@ -69,14 +77,17 @@ async function renameOverrides() { * Copies client & shared mods. */ async function copyMMCModJars() { - return src([upath.join(modDestDirectory, "*"), upath.join(modDestDirectory, "client", "*")], { - nodir: true, - resolveSymlinks: false, - }).pipe(symlink(upath.join(mmcDestDirectory, ".minecraft", "mods"))); + const f = filter((f) => !f.isDirectory()); + return src(["*", upath.join("client", "*")], { + cwd: modDestDirectory, + resolveSymlinks: true, + }) + .pipe(f) + .pipe(symlink(upath.join(mmcDestDirectory, ".minecraft", "mods"))); } async function createMMCConfig() { - const cfg = { + const cfg: Record = { InstanceType: "OneSix", iconKey: "default", name: modpackManifest.name, @@ -96,7 +107,7 @@ async function createMMCManifest() { const manifest = { components: [], formatVersion: 1, - }; + } as { components: unknown[]; formatVersion: number }; manifest.components.push({ cachedName: "Minecraft", @@ -128,12 +139,18 @@ async function createMMCManifest() { }); } - return fs.promises.writeFile(upath.join(mmcDestDirectory, "mmc-pack.json"), JSON.stringify(manifest, null, "\t")); + return fs.promises.writeFile( + upath.join(mmcDestDirectory, "mmc-pack.json"), + JSON.stringify(manifest, null, "\t"), + ); } export default series( mmcCleanUp, createMMCDirs, + copyMMCChangelog, + copyMMCLicense, + copyMMCUpdateNotes, copyOverrides, renameOverrides, createMMCConfig, diff --git a/tools/tasks/server/index.ts b/tools/tasks/server/index.ts index 6cd40f7..6852fdc 100644 --- a/tools/tasks/server/index.ts +++ b/tools/tasks/server/index.ts @@ -2,26 +2,31 @@ import upath from "upath"; import unzip from "unzipper"; import through from "through2"; import mustache from "mustache"; -import log from "fancy-log"; import gulp, { src, dest, symlink } from "gulp"; import fs from "fs"; -import buildConfig from "../../buildConfig"; -import Bluebird from "bluebird"; -import { ForgeProfile } from "../../types/forgeProfile"; -import { FileDef } from "../../types/fileDef"; -import { downloadOrRetrieveFileDef, getVersionManifest, libraryToPath, relative } from "../../util/util"; -import { modDestDirectory, modpackManifest, serverDestDirectory, sharedDestDirectory } from "../../globals"; -import del from "del"; -import { VersionManifest } from "../../types/versionManifest"; -import { updateBuildServerProperties } from "../misc/transformFiles"; +import buildConfig from "#buildConfig"; +import { ForgeProfile } from "#types/forgeProfile.ts"; +import { FileDef } from "#types/fileDef.ts"; +import { + downloadOrRetrieveFileDef, + getForgeJar, + getVersionManifest, +} from "#utils/util.ts"; +import { + modDestDirectory, + modpackManifest, + serverDestDirectory, + sharedDestDirectory, +} from "#globals"; +import { deleteAsync } from "del"; +import { updateBuildServerProperties } from "../misc/transformFiles.ts"; +import logInfo, { logWarn } from "#utils/log.ts"; +import filter from "gulp-filter"; -const FORGE_VERSION_REG = /forge-(.+)/; -const FORGE_MAVEN = "https://files.minecraftforge.net/maven/"; - -let g_forgeJar; +let g_forgeJar: string | undefined = undefined; async function serverCleanUp() { - return del(upath.join(serverDestDirectory, "*"), { force: true }); + return deleteAsync(upath.join(serverDestDirectory, "*"), { force: true }); } /** @@ -39,44 +44,16 @@ async function createServerDirs() { * Extract, parse the profile data and download required libraries. */ async function downloadForge() { - const minecraft = modpackManifest.minecraft; - - /** - * Break down the Forge version defined in manifest.json. - */ - const parsedForgeEntry = FORGE_VERSION_REG.exec( - (minecraft.modLoaders.find((x) => x.id && x.id.indexOf("forge") != -1) || {}).id || "", - ); - - if (!parsedForgeEntry) { - throw new Error("Malformed Forge version in manifest.json."); - } - - /** - * Transform Forge version into Maven library path. - */ - const forgeMavenLibrary = `net.minecraftforge:forge:${minecraft.version}-${parsedForgeEntry[1]}`; - const forgeInstallerPath = libraryToPath(forgeMavenLibrary) + "-installer.jar"; - const forgeUniversalPath = upath.join("maven", libraryToPath(forgeMavenLibrary) + ".jar"); - - /** - * Fetch the Forge installer - */ - const forgeJar = await fs.promises.readFile( - ( - await downloadOrRetrieveFileDef({ - url: FORGE_MAVEN + forgeInstallerPath, - }) - ).cachePath, - ); + const { forgeJar, forgeUniversalPath } = await getForgeJar(); /** * Parse the profile manifest. */ - let forgeUniversalJar: Buffer, forgeProfile: ForgeProfile; + let forgeUniversalJar: Buffer | undefined = undefined; + let forgeProfile: ForgeProfile | undefined = undefined; const files = (await unzip.Open.buffer(forgeJar))?.files; - log("Extracting Forge installation profile & jar..."); + logInfo("Extracting Forge installation profile & jar..."); if (!files) { throw new Error("Malformed Forge installation jar."); @@ -102,14 +79,19 @@ async function downloadForge() { } if (!forgeUniversalJar) { - throw new Error("Couldn't find the universal Forge jar in the installation jar."); + throw new Error( + "Couldn't find the universal Forge jar in the installation jar.", + ); } /** * Move the universal jar into the dist folder. */ - log("Extracting the Forge jar..."); - await fs.promises.writeFile(upath.join(serverDestDirectory, upath.basename(forgeUniversalPath)), forgeUniversalJar); + logInfo("Extracting the Forge jar..."); + await fs.promises.writeFile( + upath.join(serverDestDirectory, upath.basename(forgeUniversalPath)), + forgeUniversalJar, + ); /** * Save the universal jar file name for later. @@ -121,12 +103,13 @@ async function downloadForge() { /** * Finally, fetch libraries. */ - const libraries = forgeProfile.libraries.filter((x) => Boolean(x?.downloads?.artifact?.url)); - log(`Fetching ${libraries.length} server libraries...`); + const libraries = forgeProfile.libraries.filter((x) => + Boolean(x?.downloads?.artifact?.url), + ); + logInfo(`Fetching ${libraries.length} server libraries...`); - return Bluebird.map( - libraries, - async (library) => { + await Promise.all( + libraries.map(async (library) => { const libraryPath = library.downloads.artifact.path; const def: FileDef = { @@ -134,15 +117,23 @@ async function downloadForge() { }; if (library.downloads.artifact.sha1) { - def.hashes = [{ id: "sha1", hashes: [library.downloads.artifact.sha1] }]; + def.hashes = [ + { id: "sha1", hashes: [library.downloads.artifact.sha1] }, + ]; } - const destPath = upath.join(serverDestDirectory, "libraries", libraryPath); + const destPath = upath.join( + serverDestDirectory, + "libraries", + libraryPath, + ); await fs.promises.mkdir(upath.dirname(destPath), { recursive: true }); - await fs.promises.symlink(relative(destPath, (await downloadOrRetrieveFileDef(def)).cachePath), destPath); - }, - { concurrency: buildConfig.downloaderConcurrency }, + return fs.promises.copyFile( + (await downloadOrRetrieveFileDef(def)).cachePath, + destPath, + ); + }), ); } @@ -150,10 +141,12 @@ async function downloadForge() { * Download the server jar. */ async function downloadMinecraftServer() { - log("Fetching the Minecraft version manifest..."); - const versionManifest: VersionManifest = await getVersionManifest(modpackManifest.minecraft.version); + logInfo("Fetching the Minecraft version manifest..."); + const versionManifest = await getVersionManifest( + modpackManifest.minecraft.version, + ); if (!versionManifest) { - throw new Error(`No manifest found for Minecraft ${versionManifest.id}`); + throw new Error(`No manifest found for Minecraft ${versionManifest}`); } /** @@ -170,26 +163,37 @@ async function downloadMinecraftServer() { throw new Error(`No server jar file found for ${versionManifest.id}`); } - const dest = upath.join(serverDestDirectory, `minecraft_server.${versionManifest.id}.jar`); - await fs.promises.symlink(relative(dest, serverJar.cachePath), dest); + const dest = upath.join( + serverDestDirectory, + `minecraft_server.${versionManifest.id}.jar`, + ); + await fs.promises.symlink(upath.resolve(serverJar.cachePath), dest); } /** * Copies server & shared mods. */ async function copyServerMods() { - return src([upath.join(modDestDirectory, "*"), upath.join(modDestDirectory, "server", "*")], { - nodir: true, - resolveSymlinks: false, - }).pipe(symlink(upath.join(serverDestDirectory, "mods"))); + const f = filter((f) => !f.isDirectory()); + return src(["*", upath.join("server", "*")], { + cwd: modDestDirectory, + resolveSymlinks: true, + }) + .pipe(f) + .pipe(symlink(upath.join(serverDestDirectory, "mods"))); } /** * Copies modpack overrides. */ function copyServerOverrides() { - return gulp - .src(buildConfig.copyFromSharedServerGlobs, { nodir: true, cwd: sharedDestDirectory, allowEmpty: true }) + const f = filter((f) => !f.isDirectory()); + return src(buildConfig.copyFromSharedServerGlobs, { + cwd: sharedDestDirectory, + allowEmpty: true, + resolveSymlinks: true, + }) + .pipe(f) .pipe(symlink(upath.join(serverDestDirectory))); } @@ -211,14 +215,18 @@ function copyServerLicense() { * Copies the update notes file. */ function copyServerUpdateNotes() { - return src("../UPDATENOTES.md", { allowEmpty: true }).pipe(dest(serverDestDirectory)); + return src("../UPDATENOTES.md", { allowEmpty: true }).pipe( + dest(serverDestDirectory), + ); } /** * Copies the changelog file. */ function copyServerChangelog() { - return src(upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md")).pipe(dest(serverDestDirectory)); + return src( + upath.join(buildConfig.buildDestinationDirectory, "CHANGELOG.md"), + ).pipe(dest(serverDestDirectory)); } /** @@ -237,8 +245,8 @@ function processLaunchscripts() { if (g_forgeJar) { rules.forgeJar = g_forgeJar; } else { - log.warn("No forgeJar specified!"); - log.warn("Did downloadForge task fail?"); + logWarn("No forgeJar specified!"); + logWarn("Did downloadForge task fail?"); } return src(["../launchscripts/**"]) @@ -254,7 +262,7 @@ function processLaunchscripts() { .pipe(dest(serverDestDirectory)); } -export default gulp.series([ +export default gulp.series( serverCleanUp, createServerDirs, downloadForge, @@ -267,4 +275,4 @@ export default gulp.series([ copyServerUpdateNotes, processLaunchscripts, updateBuildServerProperties, -]); +); diff --git a/tools/tasks/shared/index.ts b/tools/tasks/shared/index.ts index 8b2893b..a55b7d9 100644 --- a/tools/tasks/shared/index.ts +++ b/tools/tasks/shared/index.ts @@ -1,23 +1,32 @@ import fs from "fs"; -import gulp from "gulp"; +import gulp, { dest, src } from "gulp"; import upath from "upath"; -import buildConfig from "../../buildConfig"; +import buildConfig from "#buildConfig"; import { modDestDirectory, modpackManifest, overridesFolder, rootDirectory, sharedDestDirectory, - tempDirectory -} from "../../globals"; -import del from "del"; -import { FileDef } from "../../types/fileDef"; -import Bluebird from "bluebird"; -import { downloadFileDef, downloadOrRetrieveFileDef, isEnvVariableSet, relative } from "../../util/util"; + tempDirectory, +} from "#globals"; +import { deleteAsync } from "del"; +import { FileDef } from "#types/fileDef.ts"; +import { + downloadFileDef, + downloadOrRetrieveFileDef, + isEnvVariableSet, +} from "#utils/util.ts"; +import transformVersion from "./transformVersion.ts"; +import { createBuildChangelog } from "../changelog/index.ts"; +import mustache from "mustache"; +import { updateBuildRandomPatches } from "../misc/transformFiles.ts"; +import { transformQuestBook } from "./quest.ts"; +import logInfo from "#utils/log.ts"; async function sharedCleanUp() { - await del(upath.join(sharedDestDirectory, "*"), { force: true }); - await del(upath.join(tempDirectory, "*"), { force: true }); + await deleteAsync(upath.join(sharedDestDirectory, "*"), { force: true }); + await deleteAsync(upath.join(tempDirectory, "*"), { force: true }); } /** @@ -38,10 +47,10 @@ async function createSharedDirs() { */ async function copyOverrides() { // Don't copy server.properties files in config-overrides, it is auto transformed into the server build folder + // Copy, not Symlink, so we can transform the files as we wish return new Promise((resolve) => { - gulp - .src(buildConfig.copyToSharedDirGlobs, { cwd: upath.join(buildConfig.buildSourceDirectory) }) - .pipe(gulp.dest(upath.join(sharedDestDirectory, overridesFolder))) + src(buildConfig.copyToSharedDirGlobs, { cwd: upath.join(rootDirectory) }) + .pipe(dest(upath.join(sharedDestDirectory, overridesFolder))) .on("end", resolve); }); } @@ -73,17 +82,13 @@ async function fetchExternalDependencies() { delete modpackManifest.externalDependencies; - return Bluebird.map( - depDefs, - async (depDef) => { + await Promise.all( + depDefs.map(async (depDef) => { const dest = upath.join(destDirectory, upath.basename(depDef.url)); const cachePath = (await downloadOrRetrieveFileDef(depDef)).cachePath; - const rel = relative(dest, cachePath); - - await fs.promises.symlink(rel, dest); - }, - { concurrency: buildConfig.downloaderConcurrency }, + return fs.promises.symlink(upath.resolve(dest, cachePath), dest); + }), ); } } @@ -92,25 +97,41 @@ async function fetchExternalDependencies() { * Either fetches the Changelog File, or makes one. */ async function fetchOrMakeChangelog() { - if (isEnvVariableSet("CHANGELOG_URL") && isEnvVariableSet("CHANGELOG_CF_URL")) { - log("Using Changelog Files from URL."); - await downloadChangelogs(process.env.CHANGELOG_URL, process.env.CHANGELOG_CF_URL); - return; - } - if (isEnvVariableSet("CHANGELOG_BRANCH")) { - log("Using Changelog Files from Branch."); - const url = "https://raw.githubusercontent.com/Nomi-CEu/Nomi-CEu/{{ branch }}/{{ filename }}"; + if ( + isEnvVariableSet("CHANGELOG_URL") && + isEnvVariableSet("CHANGELOG_CF_URL") + ) { + logInfo("Using Changelog Files from URL."); await downloadChangelogs( - mustache.render(url, { branch: process.env.CHANGELOG_BRANCH, filename: "CHANGELOG.md" }), - mustache.render(url, { branch: process.env.CHANGELOG_BRNACH, filename: "CHANGELOG_CF.md" }), + process.env.CHANGELOG_URL ?? "", + process.env.CHANGELOG_CF_URL ?? "", ); return; } - log("Creating Changelog Files."); + if (isEnvVariableSet("CHANGELOG_BRANCH")) { + logInfo("Using Changelog Files from Branch."); + const url = + "https://raw.githubusercontent.com/Nomi-CEu/Nomi-CEu/{{ branch }}/{{ filename }}"; + await downloadChangelogs( + mustache.render(url, { + branch: process.env.CHANGELOG_BRANCH, + filename: "CHANGELOG.md", + }), + mustache.render(url, { + branch: process.env.CHANGELOG_BRNACH, + filename: "CHANGELOG_CF.md", + }), + ); + return; + } + logInfo("Creating Changelog Files."); await createBuildChangelog(); } -async function downloadChangelogs(changelogURL: string, changelogCFURL: string) { +async function downloadChangelogs( + changelogURL: string, + changelogCFURL: string, +) { const changelog = await downloadFileDef({ url: changelogURL }); const changelogCF = await downloadFileDef({ url: changelogCFURL }); @@ -118,16 +139,23 @@ async function downloadChangelogs(changelogURL: string, changelogCFURL: string) await writeToChangelog(changelogCF, "CHANGELOG_CF.md", changelogCFURL); } -async function writeToChangelog(buffer: Buffer, changelogFile: string, url: string) { - let handle: fs.promises.FileHandle; +async function writeToChangelog( + buffer: Buffer, + changelogFile: string, + url: string, +) { + let handle: fs.promises.FileHandle | undefined = undefined; try { - handle = await fs.promises.open(upath.join(buildConfig.buildDestinationDirectory, changelogFile), "w"); + handle = await fs.promises.open( + upath.join(buildConfig.buildDestinationDirectory, changelogFile), + "w", + ); await handle.write(buffer); await handle.close(); } catch (err) { if (handle && (await handle.stat()).isFile()) { - log(`Couldn't download changelog from URL ${url}, cleaning up...`); + logInfo(`Couldn't download changelog from URL ${url}, cleaning up...`); await handle.close(); } @@ -135,13 +163,6 @@ async function writeToChangelog(buffer: Buffer, changelogFile: string, url: stri } } -import transformVersion from "./transformVersion"; -import { createBuildChangelog } from "../changelog/createChangelog"; -import mustache from "mustache"; -import log from "fancy-log"; -import { updateBuildRandomPatches } from "../misc/transformFiles"; -import { transformQuestBook } from "./quest"; - export default gulp.series( sharedCleanUp, createSharedDirs, diff --git a/tools/tasks/shared/quest.ts b/tools/tasks/shared/quest.ts index 25383d8..287c4b2 100644 --- a/tools/tasks/shared/quest.ts +++ b/tools/tasks/shared/quest.ts @@ -1,10 +1,26 @@ import fs from "fs"; import upath from "upath"; -import { overridesFolder, configFolder, configOverridesFolder, sharedDestDirectory } from "../../globals"; -import { Quest, QuestBook, QuestLines as QuestLine } from "../../types/bqQuestBook"; +import { + overridesFolder, + configFolder, + configOverridesFolder, + sharedDestDirectory, +} from "#globals"; +import { + Quest, + QuestBook, + QuestLine as QuestLine, +} from "#types/bqQuestBook.ts"; -const sharedQBDefaults = upath.join(sharedDestDirectory, configFolder, "betterquesting"); -const sharedConfigOverrides = upath.join(sharedDestDirectory, configOverridesFolder); +const sharedQBDefaults = upath.join( + sharedDestDirectory, + configFolder, + "betterquesting", +); +const sharedConfigOverrides = upath.join( + sharedDestDirectory, + configOverridesFolder, +); const langFileLocation = "resources/questbook/lang"; @@ -49,7 +65,7 @@ function transformKeyPairs( * * Interesting, huh? */ -const uselessProps = { +const uselessProps: Record = { "simultaneous:1": 0, "ismain:1": 0, "repeat_relative:1": 1, @@ -77,7 +93,7 @@ const uselessProps = { "ignoresview:1": 0, }; -function stripUselessMetadata(object: unknown) { +function stripUselessMetadata(object: Record) { Object.keys(object).forEach((propName) => { const prop = object[propName]; if (prop === uselessProps[propName]) { @@ -89,9 +105,9 @@ function stripUselessMetadata(object: unknown) { return delete object[propName]; } - stripUselessMetadata(prop); + stripUselessMetadata(prop as Record); - if (Object.keys(prop).length === 0) { + if (Object.keys(prop as Record).length === 0) { return delete object[propName]; } } @@ -103,22 +119,54 @@ function stripUselessMetadata(object: unknown) { */ export async function transformQuestBook(): Promise { // Source Quest Book File Locations - const questPathNormalSource = upath.join(sharedQBDefaults, "DefaultQuests.json"); - const questPathExpertSource = upath.join(sharedQBDefaults, "saved_quests", "ExpertQuests.json"); + const questPathNormalSource = upath.join( + sharedQBDefaults, + "DefaultQuests.json", + ); + const questPathExpertSource = upath.join( + sharedQBDefaults, + "saved_quests", + "ExpertQuests.json", + ); // Quest Book Objects - const questBookNormal: QuestBook = JSON.parse(await fs.promises.readFile(questPathNormalSource, "utf-8")); - const questBookExpert: QuestBook = JSON.parse(await fs.promises.readFile(questPathExpertSource, "utf-8")); + const questBookNormal: QuestBook = JSON.parse( + await fs.promises.readFile(questPathNormalSource, "utf-8"), + ); + const questBookExpert: QuestBook = JSON.parse( + await fs.promises.readFile(questPathExpertSource, "utf-8"), + ); // Quest Book Paths - const questPathNormalDefault = upath.join(sharedQBDefaults, "DefaultQuests.json"); - const questPathNormalOverride = upath.join(sharedConfigOverrides, "normal", "betterquesting", "DefaultQuests.json"); + const questPathNormalDefault = upath.join( + sharedQBDefaults, + "DefaultQuests.json", + ); + const questPathNormalOverride = upath.join( + sharedConfigOverrides, + "normal", + "betterquesting", + "DefaultQuests.json", + ); - const questPathExpertDefault = upath.join(sharedQBDefaults, "saved_quests", "ExpertQuests.json"); - const questPathExpertOverride = upath.join(sharedConfigOverrides, "expert", "betterquesting", "DefaultQuests.json"); + const questPathExpertDefault = upath.join( + sharedQBDefaults, + "saved_quests", + "ExpertQuests.json", + ); + const questPathExpertOverride = upath.join( + sharedConfigOverrides, + "expert", + "betterquesting", + "DefaultQuests.json", + ); // Quest Lang Location - const questLangLocation = upath.join(sharedDestDirectory, overridesFolder, langFileLocation); + const questLangLocation = upath.join( + sharedDestDirectory, + overridesFolder, + langFileLocation, + ); // Traverse through the quest book and rewrite titles/descriptions. // Extract title/desc pairs into a lang file. @@ -149,16 +197,31 @@ export async function transformQuestBook(): Promise { // Write lang file. await fs.promises.mkdir(questLangLocation, { recursive: true }); - await fs.promises.writeFile(upath.join(questLangLocation, "en_us.lang"), lines.join("\n")); + await fs.promises.writeFile( + upath.join(questLangLocation, "en_us.lang"), + lines.join("\n"), + ); // Strip useless metadata. - stripUselessMetadata(questBookNormal); - stripUselessMetadata(questBookExpert); + stripUselessMetadata(questBookNormal as unknown as Record); + stripUselessMetadata(questBookExpert as unknown as Record); // Write QB files. - await fs.promises.writeFile(questPathNormalDefault, JSON.stringify(questBookNormal, null, 2)); - await fs.promises.writeFile(questPathNormalOverride, JSON.stringify(questBookNormal, null, 2)); + await fs.promises.writeFile( + questPathNormalDefault, + JSON.stringify(questBookNormal, null, 2), + ); + await fs.promises.writeFile( + questPathNormalOverride, + JSON.stringify(questBookNormal, null, 2), + ); - await fs.promises.writeFile(questPathExpertDefault, JSON.stringify(questBookExpert, null, 2)); - return await fs.promises.writeFile(questPathExpertOverride, JSON.stringify(questBookExpert, null, 2)); + await fs.promises.writeFile( + questPathExpertDefault, + JSON.stringify(questBookExpert, null, 2), + ); + return await fs.promises.writeFile( + questPathExpertOverride, + JSON.stringify(questBookExpert, null, 2), + ); } diff --git a/tools/tasks/shared/transformVersion.ts b/tools/tasks/shared/transformVersion.ts index e135077..698f122 100644 --- a/tools/tasks/shared/transformVersion.ts +++ b/tools/tasks/shared/transformVersion.ts @@ -1,4 +1,4 @@ -import { modpackManifest } from "../../globals"; +import { modpackManifest } from "#globals"; /** * Transform the version field of manifest.json. @@ -14,7 +14,11 @@ export default async function transformManifestVersion(): Promise { modpackManifest.version = `${process.env.GITHUB_HEAD_REF}-${shortCommit}`; } // If SHA and ref is provided, append both the branch and short SHA. - else if (process.env.GITHUB_SHA && process.env.GITHUB_REF && process.env.GITHUB_REF.startsWith("refs/heads/")) { + else if ( + process.env.GITHUB_SHA && + process.env.GITHUB_REF && + process.env.GITHUB_REF.startsWith("refs/heads/") + ) { const shortCommit = process.env.GITHUB_SHA.substring(0, 7); const branch = /refs\/heads\/(.+)/.exec(process.env.GITHUB_REF)?.[1]; if (!branch) { diff --git a/tools/templates/mainmenu.json b/tools/templates/mainmenu.json index 89ba541..6f453e7 100644 --- a/tools/templates/mainmenu.json +++ b/tools/templates/mainmenu.json @@ -1,150 +1,150 @@ { - "images": { - "title": { - "image": "minecraft:textures/gui/title/top.png", - "posX": -150, - "posY": 4, - "width": 300, - "height": 79, - "alignment": "top_center" - } - }, - "buttons": { - "singleplayer": { - "text": "menu.singleplayer", - "posX": 4, - "posY": -46, - "width": 120, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openGui", - "gui": "singleplayer" - } - }, - "multiplayer": { - "text": "menu.multiplayer", - "posX": 125, - "posY": -46, - "width": 120, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openGui", - "gui": "multiplayer" - } - }, - "mods": { - "text": "fml.menu.mods", - "posX": 4, - "posY": -22, - "width": 120, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openGui", - "gui": "mods" - } - }, - "options": { - "text": "menu.options", - "posX": 125, - "posY": -22, - "width": 120, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openGui", - "gui": "options" - } - }, - "quit": { - "text": "menu.quit", - "posX": 4, - "posY": 74, - "width": 240, - "height": 20, - "alignment": "left_center", - "action": { - "type": "quit" - } - }, - "update": { - "text": "Update Changes", - "posX": 125, - "posY": 26, - "width": 120, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openLink", - "link": "https://github.com/Nomi-CEu/Nomi-CEu/releases/tag/{{{version}}}" - } - }, - "discord": { - "text": "Join Us On Discord!", - "posX": 4, - "posY": 26, - "width": 120, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openLink", - "link": "https://discord.gg/zwQzqP8b6q" - } - }, - "akliz": { - "text": "Rent Your Own Nomifactory Server!", - "posX": 4, - "posY": 50, - "width": 240, - "height": 20, - "alignment": "left_center", - "action": { - "type": "openLink", - "link": "https://www.akliz.net/nomifactory" - } - } - }, - "labels": { - "mojang": { - "text": "Copyright Mojang AB. Do not distribute!", - "posX": -197, - "posY": -10, - "color": -1, - "alignment": "bottom_right" - } - }, - "other": { - "background": { - "image": "", - "slideshow": { - "displayDuration": 100, - "fadeDuration": 40, - "shuffle" : true, - "images": [ - "minecraft:textures/gui/title/background/besoiobiy_1.png", - "minecraft:textures/gui/title/background/besoiobiy_2.png", - "minecraft:textures/gui/title/background/cactus_cool.png", - "minecraft:textures/gui/title/background/cobracreeper1.png", - "minecraft:textures/gui/title/background/darkarkangel.png", - "minecraft:textures/gui/title/background/ely_1.png", - "minecraft:textures/gui/title/background/ely_2.png", - "minecraft:textures/gui/title/background/ely_3.png", - "minecraft:textures/gui/title/background/emiuna.png", - "minecraft:textures/gui/title/background/extracoolcat_1.png", - "minecraft:textures/gui/title/background/extracoolcat_2.png", - "minecraft:textures/gui/title/background/extracoolcat_3.png", - "minecraft:textures/gui/title/background/extracoolcat_4.png", - "minecraft:textures/gui/title/background/gaboggamer.png", - "minecraft:textures/gui/title/background/itstheguywhoasked.png", - "minecraft:textures/gui/title/background/lyeo.png", - "minecraft:textures/gui/title/background/pgs_1.png", - "minecraft:textures/gui/title/background/pgs_2.png", - "minecraft:textures/gui/title/background/qr_est.png", - "minecraft:textures/gui/title/background/supasem.png" - ] - } - } - } + "images": { + "title": { + "image": "minecraft:textures/gui/title/top.png", + "posX": -150, + "posY": 4, + "width": 300, + "height": 79, + "alignment": "top_center" + } + }, + "buttons": { + "singleplayer": { + "text": "menu.singleplayer", + "posX": 4, + "posY": -46, + "width": 120, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openGui", + "gui": "singleplayer" + } + }, + "multiplayer": { + "text": "menu.multiplayer", + "posX": 125, + "posY": -46, + "width": 120, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openGui", + "gui": "multiplayer" + } + }, + "mods": { + "text": "fml.menu.mods", + "posX": 4, + "posY": -22, + "width": 120, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openGui", + "gui": "mods" + } + }, + "options": { + "text": "menu.options", + "posX": 125, + "posY": -22, + "width": 120, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openGui", + "gui": "options" + } + }, + "quit": { + "text": "menu.quit", + "posX": 4, + "posY": 74, + "width": 240, + "height": 20, + "alignment": "left_center", + "action": { + "type": "quit" + } + }, + "update": { + "text": "Update Changes", + "posX": 125, + "posY": 26, + "width": 120, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openLink", + "link": "https://github.com/Nomi-CEu/Nomi-CEu/releases/tag/{{{version}}}" + } + }, + "discord": { + "text": "Join Us On Discord!", + "posX": 4, + "posY": 26, + "width": 120, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openLink", + "link": "https://discord.gg/zwQzqP8b6q" + } + }, + "akliz": { + "text": "Rent Your Own Nomifactory Server!", + "posX": 4, + "posY": 50, + "width": 240, + "height": 20, + "alignment": "left_center", + "action": { + "type": "openLink", + "link": "https://www.akliz.net/nomifactory" + } + } + }, + "labels": { + "mojang": { + "text": "Copyright Mojang AB. Do not distribute!", + "posX": -197, + "posY": -10, + "color": -1, + "alignment": "bottom_right" + } + }, + "other": { + "background": { + "image": "", + "slideshow": { + "displayDuration": 100, + "fadeDuration": 40, + "shuffle": true, + "images": [ + "minecraft:textures/gui/title/background/besoiobiy_1.jpg", + "minecraft:textures/gui/title/background/besoiobiy_2.jpg", + "minecraft:textures/gui/title/background/cactus_cool.jpg", + "minecraft:textures/gui/title/background/cobracreeper1.jpg", + "minecraft:textures/gui/title/background/darkarkangel.jpg", + "minecraft:textures/gui/title/background/ely_1.jpg", + "minecraft:textures/gui/title/background/ely_2.jpg", + "minecraft:textures/gui/title/background/ely_3.jpg", + "minecraft:textures/gui/title/background/emiuna.jpg", + "minecraft:textures/gui/title/background/extracoolcat_1.jpg", + "minecraft:textures/gui/title/background/extracoolcat_2.jpg", + "minecraft:textures/gui/title/background/extracoolcat_3.jpg", + "minecraft:textures/gui/title/background/extracoolcat_4.jpg", + "minecraft:textures/gui/title/background/gaboggamer.jpg", + "minecraft:textures/gui/title/background/itstheguywhoasked.jpg", + "minecraft:textures/gui/title/background/lyeo.jpg", + "minecraft:textures/gui/title/background/pgs_1.jpg", + "minecraft:textures/gui/title/background/pgs_2.jpg", + "minecraft:textures/gui/title/background/qr_est.jpg", + "minecraft:textures/gui/title/background/supasem.jpg" + ] + } + } + } } diff --git a/tools/tsNodeESMRegister.mjs b/tools/tsNodeESMRegister.mjs new file mode 100644 index 0000000..b9c8afd --- /dev/null +++ b/tools/tsNodeESMRegister.mjs @@ -0,0 +1,4 @@ +import { register } from "node:module"; +import { pathToFileURL } from "node:url"; + +register("ts-node/esm", pathToFileURL("./")); diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 0a0671a..ac7f960 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -1,10 +1,25 @@ { "compilerOptions": { - "sourceMap": true, - "module": "commonjs", - "target": "es5", + "lib": ["es2023"], + "module": "nodenext", + "moduleResolution": "nodenext", + "target": "es2022", + "strict": true, + "noEmit": true, + "outDir": ".dest", + "rootDir": ".", + "allowImportingTsExtensions": true, + "resolvePackageJsonImports": true, "esModuleInterop": true, - "resolveJsonModule": true, - "downlevelIteration": true, - } -} \ No newline at end of file + "skipLibCheck": true, + "resolveJsonModule": true + }, + "include": [ + "gulpfile.ts", + "globals.ts", + "buildConfig.ts", + "tasks/**/*", + "types/**/*", + "utils/**/*" + ] +} diff --git a/tools/types/actionQBTypes.ts b/tools/types/actionQBTypes.ts new file mode 100644 index 0000000..8e008e8 --- /dev/null +++ b/tools/types/actionQBTypes.ts @@ -0,0 +1,122 @@ +import { Quest } from "./bqQuestBook.ts"; +import { Operation } from "just-diff"; +import { Matcher } from "picomatch"; + +// QB Porting From. +export type PortingType = "NORMAL" | "EXPERT"; + +// Which File to Source From +export type SourceOption = "CFG" | "CFG-OVERRIDE"; + +export type YesIgnoreNo = "YES" | "IGNORE" | "NO"; + +// How should we apply description change? +export type DescriptionTaskChange = "APPLY" | "REPLACE" | "CUSTOM" | "IGNORE"; +export type CustomDescriptionTaskTemplate = "APPLY" | "REPLACE" | "ORIGINAL"; +export type TaskDifferentSolution = "APPLY" | "CONTINUE" | "IGNORE"; + +export interface Changed { + added: Quest[]; + modified: Modified[]; + removed: Quest[]; +} + +export interface Modified { + currentQuest: Quest; + oldQuest: Quest; + change: QuestChange[]; +} + +export interface QuestChange { + op: Operation; + path: number[] | string[]; + value?: unknown; +} + +export interface Replacements { + search: RegExp; + replacement: string; +} + +export interface Parser { + id: string; + name: string; + condition: Matcher; + logic: SimpleLogic | BunchedLogic; +} + +export enum LogicType { + Simple = "SIMPLE", + Bunched = "BUNCHED", +} + +export interface SimpleLogic { + type: LogicType.Simple; + applyOnce: boolean; + formattedName?: (path: string[], op: Operation) => string; + func: ( + questToModify: Quest, + modify: Modified, + change: QuestChange, + path: string[], + ) => Promise; +} + +export interface BunchedLogic { + type: LogicType.Bunched; + applyTogether: (path1: string[], path2: string[]) => boolean; + formattedName: (changeAndPaths: ChangeAndPath[]) => string[]; + func: ( + questToModify: Quest, + modify: Modified, + changeAndPaths: ChangeAndPath[], + ) => Promise; +} + +export interface SavedPorter { + savedQuestMap: SavedQuestPath[]; + alwaysAskQuestsNormal: number[]; + alwaysAskQuestsExpert: number[]; + ignoreQuestsNormal: number[]; + ignoreQuestsExpert: number[]; +} + +export interface SavedQuestPath { + normal: number; + expert: number; +} + +export interface BunchedParserPath { + logic: BunchedLogic; + changeAndPath: ChangeAndPath[]; +} + +export type ChangeAndPath = { + change: QuestChange; + path: string[]; +}; + +export type SpecialModifierHandler = ( + oldQuest: Quest, + currentQuest: Quest, + questDiff: QuestChange[], +) => void; + +export class Message { + private readonly message: string; + private repeats: number; + + constructor(message: string) { + this.message = message; + this.repeats = 1; + } + + incrementRepeats(): void { + this.repeats++; + } + + toFormattedString(): string { + if (this.repeats === 1) return this.message; + else return `${this.message} (x${this.repeats})`; + } +} diff --git a/tools/types/axios.ts b/tools/types/axios.ts new file mode 100644 index 0000000..841162b --- /dev/null +++ b/tools/types/axios.ts @@ -0,0 +1,11 @@ +import { FileDef } from "#types/fileDef.ts"; + +declare module "axios" { + export interface AxiosRequestConfig { + nomiCfg?: NomiConfig; + } +} + +export interface NomiConfig { + fileDef?: FileDef; +} diff --git a/tools/types/bqQuestBook.ts b/tools/types/bqQuestBook.ts index 23b3983..179b20c 100644 --- a/tools/types/bqQuestBook.ts +++ b/tools/types/bqQuestBook.ts @@ -1,15 +1,22 @@ export interface QuestBook { "format:8": string; "questDatabase:9": { [key: string]: Quest }; - "questLines:9": { [key: string]: QuestLines }; + "questLines:9": { [key: string]: QuestLine }; "questSettings:10": QuestSettings; } export interface Quest { + "preRequisiteTypes:7"?: number[]; "preRequisites:11": number[]; "properties:10": QuestProperties; "questID:3": number; - "rewards:9": Rewards9; + "rewards:9": { [key: string]: Rewards }; + "tasks:9": { [key: string]: Task }; +} + +export interface Task { + "index:3": number; + "taskID:8": string; } export interface QuestProperties { @@ -21,6 +28,7 @@ export interface QuestPropertiesBQ { "desc:8": string; "globalshare:1": number; "icon:10": Icon; + "ignoresview:1": number; "ismain:1": number; "issilent:1": number; "lockedprogress:1": number; @@ -44,45 +52,35 @@ export interface Icon { "tag:10"?: unknown; } -export enum QuestLogic { - And = "AND", - Or = "OR", -} +export type QuestLogic = "AND" | "OR"; -export enum QuestVisibility { - Always = "ALWAYS", - Chain = "CHAIN", - Hidden = "HIDDEN", - Normal = "NORMAL", - Unlocked = "UNLOCKED", -} +export type QuestVisibility = + | "ALWAYS" + | "CHAIN" + | "HIDDEN" + | "NORMAL" + | "UNLOCKED"; -export interface Rewards9 { - "0:10"?: Rewards9_010; -} - -export interface Rewards9_010 { +export interface Rewards { "index:3": number; - "rewardID:8": RewardID8; + "rewardID:8": string; "rewards:9"?: { [key: string]: Icon }; "choices:9"?: { [key: string]: Icon }; } -export enum RewardID8 { - BqStandardChoice = "bq_standard:choice", - BqStandardItem = "bq_standard:item", -} - -export enum TaskID8 { - BqStandardCheckbox = "bq_standard:checkbox", - BqStandardRetrieval = "bq_standard:retrieval", -} - -export interface QuestLines { +export interface QuestLine { "lineID:3": number; "order:3": number; "properties:10": QuestLines9_Properties10; - "quests:9": { [key: string]: { [key: string]: number } }; + "quests:9": { [key: string]: QuestLinesQuest }; +} + +export interface QuestLinesQuest { + "id:3": number; + "sizeX:3": number; + "sizeY:3": number; + "x:3": number; + "y:3": number; } export interface QuestLines9_Properties10 { diff --git a/tools/types/changelogTypes.ts b/tools/types/changelogTypes.ts index b02c9b0..28204f9 100644 --- a/tools/types/changelogTypes.ts +++ b/tools/types/changelogTypes.ts @@ -1,4 +1,4 @@ -import ChangelogData from "../tasks/changelog/changelogData"; +import ChangelogData from "#tasks/changelog/changelogData.ts"; export interface Commit { hash: string; @@ -114,7 +114,8 @@ export interface ChangelogMessage { /** * If this changelog message is special. This is special formatting for it. */ - specialFormatting?: SpecialChangelogFormatting; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + specialFormatting?: SpecialChangelogFormatting; } /** @@ -128,7 +129,12 @@ export interface SpecialChangelogFormatting { * @param indentation The indentation level to use * @param storage May be null, is the defined storage in this interface */ - formatting: (message: string, subMessage: boolean, indentation: string, storage?: T) => string; + formatting: ( + message: string, + subMessage: boolean, + indentation: string, + storage?: T, + ) => string; /** * Storage @@ -156,7 +162,11 @@ export interface Parser { * commitBody: The body of the commit. Might be undefined.

* return: True to skip, false to not. */ - skipCallback: (commit: Commit, commitMessage: string, commitBody?: string) => boolean; + skipCallback: ( + commit: Commit, + commitMessage: string, + commitBody?: string, + ) => boolean; /** * Callback per item. @@ -293,7 +303,11 @@ export interface PriorityInfo { export type FixUpMode = "REPLACE" | "ADDITION"; -export type InputReleaseType = "Release" | "Beta Release" | "Alpha Release" | "Cutting Edge Build"; +export type InputReleaseType = + | "Release" + | "Beta Release" + | "Alpha Release" + | "Cutting Edge Build"; export interface DeployReleaseType { isPreRelease: boolean; @@ -301,7 +315,10 @@ export interface DeployReleaseType { } // Cutting Edge Build is not needed here, as this type is only used for deploying, and not building. -export const inputToDeployReleaseTypes: Record = { +export const inputToDeployReleaseTypes: Record< + InputReleaseType, + DeployReleaseType +> = { Release: { isPreRelease: false, cfReleaseType: "release", @@ -314,5 +331,8 @@ export const inputToDeployReleaseTypes: Record { - const parsedLibrary = LIBRARY_REG.exec(library); - if (parsedLibrary) { - const pkg = parsedLibrary[1].replace(/\./g, "/"); - const name = parsedLibrary[2]; - const version = parsedLibrary[3]; - - return `${pkg}/${name}/${version}/${name}-${version}`; - } -}; - -/** - * Checks if given environmental variables are set. Throws otherwise. - */ -export const checkEnvironmentalVariables = (vars: string[]): void => { - vars.forEach((vari) => { - if (!isEnvVariableSet(vari)) { - throw new Error(`Environmental variable ${vari} is unset.`); - } - }); -}; - -/** - * Returns true if given variable set, false otherwise. - */ -export const isEnvVariableSet = (env: string): boolean => { - return process.env[env] && process.env[env] != ""; -}; - -/** - * Check if given git tag exists. Throws otherwise. - */ -export const checkGitTag = (tag: string): void => { - // The below command returns an empty buffer if the given tag does not exist. - const tagBuffer = execSync(`git tag --list ${tag}`); - - if (!tagBuffer || tagBuffer.toString().trim() != tag) { - throw new Error(`Tag ${tag} could not be found.`); - } -}; - -export enum RetrievedFileDefReason { - Downloaded, - CacheHit, -} - -export interface RetrievedFileDef { - reason: RetrievedFileDefReason; - cachePath: string; -} - -/** - * Downloads/fetches files from the Interwebs. - * - * Internally hashes the URL of the provided FileDef and looks it up in the cache directory. - * In case of no cache hit, downloads the file and stores within the cache directory for later use. - *

- * @param fileDef The file def to download or retrieve. - */ -export async function downloadOrRetrieveFileDef(fileDef: FileDef): Promise { - const fileNameSha = sha1(fileDef.url); - - const cachedFilePath = upath.join(buildConfig.downloaderCacheDirectory, fileNameSha); - if (fs.existsSync(cachedFilePath)) { - const file = await fs.promises.readFile(cachedFilePath); - - if (file.length !== 0) { - const rFileDef = { - reason: RetrievedFileDefReason.CacheHit, - cachePath: cachedFilePath, - }; - - // Check hashes. - if (fileDef.hashes) { - if ( - fileDef.hashes.every((hashDef) => { - return compareBufferToHashDef(file, hashDef); - }) - ) { - return rFileDef; - } - } else { - return rFileDef; - } - } - } - - if (!fs.existsSync(buildConfig.downloaderCacheDirectory)) { - await fs.promises.mkdir(buildConfig.downloaderCacheDirectory, { recursive: true }); - } - - let handle: fs.promises.FileHandle; - try { - handle = await fs.promises.open(cachedFilePath, "w"); - - await handle.write(await downloadFileDef(fileDef)); - await handle.close(); - - return { - reason: RetrievedFileDefReason.Downloaded, - cachePath: cachedFilePath, - }; - } catch (err) { - if (handle && (await handle.stat()).isFile()) { - log(`Couldn't download ${upath.basename(fileDef.url)}, cleaning up ${fileNameSha}...`); - - await handle.close(); - await fs.promises.unlink(cachedFilePath); - } - - throw err; - } -} - -/** - * Similar to downloadOrRetrieveFileDef, but does not check cache. - */ -export async function downloadFileDef(fileDef: FileDef): Promise { - let hashFailed = false; - const retryStrategy = (err: Error, response: http.IncomingMessage, body: unknown) => { - if (!response) return requestretry.RetryStrategies.HTTPOrNetworkError(err, response, body); - if (response.statusCode === 404) throw new Error(`URL ${fileDef.url} returned status 404.`); - - // Verify hashes. - if (!err && fileDef.hashes && body) { - const success = fileDef.hashes.every((hashDef) => { - return compareBufferToHashDef(body as Buffer, hashDef); - }); - - if (!success) { - if (hashFailed) { - throw new Error(`Couldn't verify checksums of ${upath.basename(fileDef.url)}`); - } - - hashFailed = true; - return true; - } - } - return requestretry.RetryStrategies.HTTPOrNetworkError(err, response, body); - }; - - return Buffer.from( - await requestretry({ - url: fileDef.url, - fullResponse: false, - encoding: null, - retryStrategy: retryStrategy, - maxAttempts: 5, - }), - ); -} - -/** - * Returns artifact name body depending on environment variables. - * Mostly intended to be called by CI/CD. - */ -export function makeArtifactNameBody(baseName: string): string { - // If the tag is provided by CI, simply just glue it to the base name. - if (process.env.GITHUB_TAG) { - return `${baseName}-${process.env.GITHUB_TAG}`; - } - // If Pull Request Branch Name is provided and a 'True SHA' is provided - else if (process.env.GITHUB_HEAD_REF && process.env.TRUE_SHA) { - const shortCommit = process.env.TRUE_SHA.substring(0, 7); - return `${baseName}-${process.env.GITHUB_HEAD_REF}-${shortCommit}`; - } - // If SHA and ref is provided, append both the branch and short SHA. - else if (process.env.GITHUB_SHA && process.env.GITHUB_REF && process.env.GITHUB_REF.startsWith("refs/heads/")) { - const shortCommit = process.env.GITHUB_SHA.substring(0, 7); - const branch = /refs\/heads\/(.+)/.exec(process.env.GITHUB_REF); - return `${baseName}-${branch[1]}-${shortCommit}`; - } else { - return baseName; - } -} - -/** - * Returns and fetches the last tag known to Git using the current branch. - * @param before Tag to get the tag before. - * @returns string Git tag. - * @throws - */ -export function getLastGitTag(before?: string): string { - if (before) { - before = `"${before}^"`; - } - - return execSync(`git describe --abbrev=0 --tags ${before || ""}`) - .toString() - .trim(); -} - -/** - * Generates a changelog based on the two provided Git refs. - * @param since Lower boundary Git ref. - * @param to Upper boundary Git ref. - * @param dirs Optional scopes. These are of the perspective of the root dir. - * @returns changelog Object Array of Changelog - */ -export async function getChangelog(since = "HEAD", to = "HEAD", dirs: string[] = undefined): Promise { - const options: string[] = ["--no-merges", `${since}..${to}`]; - if (dirs) { - dirs.forEach((dir) => { - options.push(pathspec(dir)); - }); - } - - const commitList: Commit[] = []; - await git.log(options, (err, output) => { - if (err) { - error(err); - throw new Error(); - } - - // Cannot simply set commitList as output.all as is read only, must do this - output.all.forEach((commit) => commitList.push(commit)); - }); - - return commitList; -} - -/** - * Gets the list of tags that are at or before a certain ref point. - * @param ref The ref point. Can be a tag or a commit sha. If not set, defaults to HEAD. - * @returns tags An array of all the tags - */ -export async function getTags(ref = "HEAD"): Promise { - const options: string[] = ["--merged", ref]; - const test = await git.tags(options); - return test.all; -} - -/** - * Gets the file at a certain point in time. - * @param path The path to the file - * @param revision The git ref point. Can also be a commit SHA - */ -export function getFileAtRevision(path: string, revision = "HEAD"): string { - return execSync(`git show ${revision}:"${path}"`).toString().trim(); -} - -export interface ManifestFileListComparisonResult { - removed: ModChangeInfo[]; - modified: ModChangeInfo[]; - added: ModChangeInfo[]; -} - -export async function compareAndExpandManifestDependencies( - oldFiles: ModpackManifest, - newFiles: ModpackManifest, -): Promise { - // Map inputs for efficient joining. - const oldFileMap: { [key: number]: ModpackManifestFile } = oldFiles.files.reduce((map, file) => { - map[file.projectID] = file; - return map; - }, {}); - const newFileMap: { [key: number]: ModpackManifestFile } = newFiles.files.reduce((map, file) => { - map[file.projectID] = file; - return map; - }, {}); - - const removed: ModChangeInfo[] = [], - modified: ModChangeInfo[] = [], - added: ModChangeInfo[] = []; - - // Create a distinct map of project IDs. - const projectIDs = Array.from( - new Set([...oldFiles.files.map((f) => f.projectID), ...newFiles.files.map((f) => f.projectID)]), - ); - - // Fetch projects in bulk and discard the result. - // Future calls to fetchProject() and fetchProjectsBulk() will hit the cache. - await fetchProjectsBulk(projectIDs); - - await Bluebird.map( - projectIDs, - async (projectID) => { - const oldFileInfo = oldFileMap[projectID]; - const newFileInfo = newFileMap[projectID]; - - // Doesn't exist in new, but exists in old. Removed. Left outer join. - if (!newFileInfo && oldFileInfo) { - removed.push({ - modName: (await fetchProject(oldFileInfo.projectID)).name, - projectID: projectID, - oldVersion: (await fetchFileInfo(oldFileInfo.projectID, oldFileInfo.fileID)).displayName, - }); - } - // Doesn't exist in old, but exists in new. Added. Right outer join. - else if (newFileMap[projectID] && !oldFileMap[projectID]) { - added.push({ - modName: (await fetchProject(newFileInfo.projectID)).name, - projectID: projectID, - newVersion: (await fetchFileInfo(newFileInfo.projectID, newFileInfo.fileID)).displayName, - }); - } - // Exists in both. Modified? Inner join. - else if (oldFileInfo.fileID != newFileInfo.fileID) { - modified.push({ - modName: (await fetchProject(newFileInfo.projectID)).name, - projectID: projectID, - oldVersion: (await fetchFileInfo(newFileInfo.projectID, oldFileInfo.fileID)).displayName, - newVersion: (await fetchFileInfo(newFileInfo.projectID, newFileInfo.fileID)).displayName, - }); - } - }, - { concurrency: buildConfig.downloaderConcurrency }, - ); - - // Compare external dependencies the same way. - const oldExternalMap: { [key: string]: ExternalDependency } = (oldFiles.externalDependencies || []).reduce( - (map, file) => { - map[file.name] = file; - return map; - }, - {}, - ); - const newExternalMap: { [key: string]: ExternalDependency } = (newFiles.externalDependencies || []).reduce( - (map, file) => { - map[file.name] = file; - return map; - }, - {}, - ); - - const externalNames = Array.from( - new Set([ - ...(oldFiles.externalDependencies || []).map((dep) => dep.name), - ...(newFiles.externalDependencies || []).map((dep) => dep.name), - ]), - ); - - externalNames.forEach((name) => { - const oldDep = oldExternalMap[name]; - const newDep = newExternalMap[name]; - - // Doesn't exist in new, but exists in old. Removed. Left outer join. - if (!newDep && oldDep) { - removed.push({ modName: oldDep.name }); - } - // Doesn't exist in old, but exists in new. Added. Right outer join. - else if (newDep && !oldDep) { - added.push({ modName: newDep.name }); - } - // Exists in both. Modified? Inner join. - else if (oldDep.url != newDep.url || oldDep.name != newDep.name) { - modified.push({ modName: newDep.name }); - } - }); - - return { - removed: removed, - modified: modified, - added: added, - }; -} - -const LAUNCHERMETA_VERSION_MANIFEST = "https://launchermeta.mojang.com/mc/game/version_manifest.json"; - -/** - * Fetches the version manifest associated with the provided Minecraft version. - * - * @param minecraftVersion Minecraft version. (e. g., "1.12.2") - */ -export async function getVersionManifest(minecraftVersion: string): Promise { - /** - * Fetch the manifest file of all Minecraft versions. - */ - const manifest: VersionsManifest = await request({ - uri: LAUNCHERMETA_VERSION_MANIFEST, - json: true, - fullResponse: false, - maxAttempts: 5, - }); - - const version = manifest.versions.find((x) => x.id == minecraftVersion); - if (!version) { - return null; - } - - return request({ - uri: version.url, - json: true, - fullResponse: false, - maxAttempts: 5, - }); -} - -/** - * Returns a relative posix path from the first argument to the second. - */ -export function relative(from: string, to: string): string { - const broken = [from.split(upath.sep), to.split(upath.sep)]; - - while (broken.every((x) => x.length > 0) && broken[0][0] == broken[1][0]) { - broken.forEach((x) => x.shift()); - } - - if (broken.some((x) => x.length === 0)) { - throw new Error("Paths are not relative."); - } - - return upath.join(...Array(broken[0].length - 1).fill(".."), ...broken[1]); -} - -/** - * Cleans up a file's display name, and returns the version. Works for all tested mods! - * @param version The filename/version to cleanup. - */ -export function cleanupVersion(version: string): string { - if (!version) return ""; - version = version.replace(/1\.12\.2|1\.12|\.jar/g, ""); - const list = version.match(/[\d+.?]+/g); - return list[list.length - 1]; -} - -const issueURLCache: Map = new Map(); - -/** - * Gets newest updated 100 closed issue/PR URLs of the repo and saves it to the cache. - */ -export async function getNewestIssueURLs(octokit: Octokit): Promise { - if (issueURLCache.size > 0) return; - try { - const issues = await octokit.issues.listForRepo({ - owner: repoOwner, - repo: repoName, - per_page: 100, - state: "closed", - sort: "updated", - }); - if (issues.status !== 200) { - error(`Failed to get all Issue URLs of Repo. Returned Status Code ${issues.status}, expected Status 200.`); - return; - } - issues.data.forEach((issue) => { - if (!issueURLCache.has(issue.number)) issueURLCache.set(issue.number, issue.html_url); - }); - } catch (e) { - error("Failed to get all Issue URLs of Repo. This may be because there are no issues, or because of rate limits."); - } -} - -/** - * Gets the specified Issue URL from the cache, or retrieves it. - */ -export async function getIssueURL(issueNumber: number, octokit: Octokit): Promise { - if (issueURLCache.has(issueNumber)) return issueURLCache.get(issueNumber); - try { - const issueInfo = await octokit.issues.get({ - owner: repoOwner, - repo: repoName, - issue_number: issueNumber, - }); - if (issueInfo.status !== 200) { - error( - `Failed to get the Issue/PR Info for Issue/PR #${issueNumber}. Returned Status Code ${issueInfo.status}, expected Status 200.`, - ); - return ""; - } - log(`No Issue URL Cache for Issue Number ${issueNumber}. Retrieved Specifically.`); - return issueInfo.data.html_url; - } catch (e) { - error( - `Failed to get the Issue/PR Info for Issue/PR #${issueNumber}. This may be because this is not a PR or Issue, or could be because of rate limits.`, - ); - return ""; - } -} diff --git a/tools/util/buildConfig.default.json b/tools/utils/buildConfig.default.json similarity index 53% rename from tools/util/buildConfig.default.json rename to tools/utils/buildConfig.default.json index 2c12664..9f784b9 100644 --- a/tools/util/buildConfig.default.json +++ b/tools/utils/buildConfig.default.json @@ -7,20 +7,10 @@ "launchscriptsMinRAM": "2048M", "launchscriptsMaxRAM": "2048M", "launchscriptsJVMArgs": "", - "copyToSharedDirGlobs": [ - "overrides/**/*", - "!overrides/**/server.properties" - ], - "copyFromSharedServerGlobs": [ - "overrides/**/*", - "!overrides/resources/**/*" - ], - "copyFromSharedClientGlobs": [ - "overrides/**/*" - ], + "copyToSharedDirGlobs": ["overrides/**/*", "!overrides/**/server.properties"], + "copyFromSharedServerGlobs": ["overrides/**/*", "!overrides/resources/**/*"], + "copyFromSharedClientGlobs": ["overrides/**/*"], "buildDestinationDirectory": "../build", - "buildSourceDirectory": "../", "nightlyHookAvatar": "", - "nightlyHookName": "", - "screenshotsQuality": 90 + "nightlyHookName": "" } diff --git a/tools/util/curseForgeAPI.ts b/tools/utils/curseForgeAPI.ts similarity index 68% rename from tools/util/curseForgeAPI.ts rename to tools/utils/curseForgeAPI.ts index c79ddef..9089d20 100644 --- a/tools/util/curseForgeAPI.ts +++ b/tools/utils/curseForgeAPI.ts @@ -1,14 +1,19 @@ -import bluebird from "bluebird"; -import { CurseForgeFileInfo, CurseForgeModInfo as CurseForgeProject } from "../types/curseForge"; -import log from "fancy-log"; -import request from "requestretry"; -import { ModpackManifestFile } from "../types/modpackManifest"; -import Bluebird from "bluebird"; -import buildConfig from "../buildConfig"; +import { + CurseForgeFileInfo, + CurseForgeModInfo, + CurseForgeModInfo as CurseForgeProject, +} from "#types/curseForge.ts"; +import { ModpackManifestFile } from "#types/modpackManifest.ts"; +import buildConfig from "#buildConfig"; import upath from "upath"; import fs from "fs"; -import { FileDef } from "../types/fileDef"; -import { downloadOrRetrieveFileDef, relative, RetrievedFileDefReason } from "./util"; +import { FileDef } from "#types/fileDef.ts"; +import { + downloadOrRetrieveFileDef, + getAxios, + RetrievedFileDefReason, +} from "./util.ts"; +import logInfo, { logError, logWarn } from "./log.ts"; function getCurseForgeToken() { const vari = "CFCORE_API_TOKEN"; @@ -22,22 +27,23 @@ function getCurseForgeToken() { } const curseForgeProjectCache: { [key: number]: CurseForgeProject } = {}; -export async function fetchProject(toFetch: number): Promise { +export async function fetchProject( + toFetch: number, +): Promise { if (curseForgeProjectCache[toFetch]) { return curseForgeProjectCache[toFetch]; } const project: CurseForgeProject | undefined = ( - await request({ - uri: `${buildConfig.cfCoreApiEndpoint}/v1/mods/${toFetch}`, - json: true, - fullResponse: false, - maxAttempts: 5, + await getAxios()({ + url: `${buildConfig.cfCoreApiEndpoint}/v1/mods/${toFetch}`, + method: "get", + responseType: "json", headers: { "X-Api-Key": getCurseForgeToken(), }, }) - )?.data; + ).data?.data; if (!project) { throw new Error(`Failed to fetch project ${toFetch}`); @@ -49,7 +55,10 @@ export async function fetchProject(toFetch: number): Promise } const fetchedFileInfoCache: { [key: string]: CurseForgeFileInfo } = {}; -export async function fetchFileInfo(projectID: number, fileID: number): Promise { +export async function fetchFileInfo( + projectID: number, + fileID: number, +): Promise { const slug = `${projectID}/${fileID}`; if (fetchedFileInfoCache[slug]) { @@ -57,15 +66,15 @@ export async function fetchFileInfo(projectID: number, fileID: number): Promise< } const fileInfo: CurseForgeFileInfo = ( - await request({ - uri: `${buildConfig.cfCoreApiEndpoint}/v1/mods/${projectID}/files/${fileID}`, - json: true, - fullResponse: false, + await getAxios()({ + url: `${buildConfig.cfCoreApiEndpoint}/v1/mods/${projectID}/files/${fileID}`, + method: "get", + responseType: "json", headers: { "X-Api-Key": getCurseForgeToken(), }, }) - )?.data; + ).data?.data; if (!fileInfo) { throw new Error(`Failed to download file ${projectID}/file/${fileID}`); @@ -88,7 +97,9 @@ export interface ProjectToFileId { * @param toFetch List of Project IDs to File IDs, to fetch. * @returns CurseForge file infos. */ -export async function fetchFilesBulk(toFetch: ProjectToFileId[]): Promise { +export async function fetchFilesBulk( + toFetch: ProjectToFileId[], +): Promise { const fileInfos: CurseForgeFileInfo[] = []; // Map of file ids not fetched (project ID to file ID) const unfetched: ProjectToFileId[] = []; @@ -107,18 +118,17 @@ export async function fetchFilesBulk(toFetch: ProjectToFileId[]): Promise 0) { // Augment the array of known files with new info. const fetched: CurseForgeFileInfo[] = ( - await request.post({ - uri: `${buildConfig.cfCoreApiEndpoint}/v1/mods/files`, - json: { + await getAxios()({ + url: `${buildConfig.cfCoreApiEndpoint}/v1/mods/files`, + method: "post", + data: { fileIds: unfetched.map((file) => file.fileID), }, - fullResponse: false, - maxAttempts: 5, headers: { "X-Api-Key": getCurseForgeToken(), }, }) - )?.data; + ).data?.data; if (!fetched) { throw new Error( @@ -156,10 +166,12 @@ export async function fetchFilesBulk(toFetch: ProjectToFileId[]): Promise !fileInfoIDs.has(x.fileID)))]; + const toFetchMissing = [ + ...new Set(toFetch.filter((x) => !fileInfoIDs.has(x.fileID))), + ]; if (toFetchMissing.length > 0) { - log.warn( + logWarn( `Couldn't fetch next project IDs in bulk:\n${toFetchMissing .map((file) => `File ${file.fileID} of mod ${file.projectID},`) .join("\n")}`, @@ -167,25 +179,26 @@ export async function fetchFilesBulk(toFetch: ProjectToFileId[]): Promise { - log.info( + const missingFileInfos: Promise[] = []; + for (const file of toFetchMissing) { + logInfo( `Fetching file ${file.fileID} of mod ${file.projectID} directly... (${++count} / ${toFetchMissing.length})`, ); try { // In case something fails to download; catch, rewrite, rethrow. - return await fetchFileInfo(file.projectID, file.fileID); + missingFileInfos.push(fetchFileInfo(file.projectID, file.fileID)); } catch (err) { - err.message = `Couldn't fetch file ${file.fileID} of mod ${file.projectID}. ${ - err.message || "Unknown error" - }`; + logError( + `Couldn't fetch file ${file.fileID} of mod ${file.projectID}. See Below.`, + ); throw err; } - }); + } // The code above is expected to throw and terminate the further execution, // so we can just do this. - fileInfos.push(...missingFileInfos); + fileInfos.push(...(await Promise.all(missingFileInfos))); } } } @@ -200,7 +213,9 @@ export async function fetchFilesBulk(toFetch: ProjectToFileId[]): Promise { +export async function fetchProjectsBulk( + toFetch: number[], +): Promise { const modInfos: CurseForgeProject[] = []; const unfetched: number[] = []; @@ -217,18 +232,17 @@ export async function fetchProjectsBulk(toFetch: number[]): Promise 0) { // Augment the array of known projects with new info. const fetched: CurseForgeProject[] = ( - await request.post({ - uri: `${buildConfig.cfCoreApiEndpoint}/v1/mods`, - json: { + await getAxios()({ + url: `${buildConfig.cfCoreApiEndpoint}/v1/mods`, + method: "post", + data: { modIds: unfetched, }, - fullResponse: false, - maxAttempts: 5, headers: { "X-Api-Key": getCurseForgeToken(), }, }) - )?.data; + ).data?.data; if (!fetched) { throw new Error(`Failed to bulk-fetch projects ${unfetched.join(", ")}`); @@ -245,27 +259,34 @@ export async function fetchProjectsBulk(toFetch: number[]): Promise mi.id)); - const toFetchMissing = [...new Set(toFetch.filter((x) => !modInfoIDs.has(x)))]; + const toFetchMissing = [ + ...new Set(toFetch.filter((x) => !modInfoIDs.has(x))), + ]; - log.warn(`Couldn't fetch some project IDs in bulk: ${toFetchMissing.join(", ")}`); + logWarn( + `Couldn't fetch some project IDs in bulk: ${toFetchMissing.join(", ")}`, + ); // Try fetching mods individually, in case they've been deleted. let count = 0; - const missingModInfos: CurseForgeProject[] = await bluebird.map(toFetchMissing, async (id) => { - log.info(`Fetching project ID ${id} directly... (${++count} / ${toFetchMissing.length})`); + const missingModInfos: Promise[] = []; + for (const id of toFetchMissing) { + logInfo( + `Fetching project ID ${id} directly... (${++count} / ${toFetchMissing.length})`, + ); try { // In case something fails to download; catch, rewrite, rethrow. - return await fetchProject(id); + missingModInfos.push(fetchProject(id)); } catch (err) { - err.message = `Couldn't fetch project ID ${id}. ${err.message || "Unknown error"}`; + logError(`Couldn't fetch project ID ${id}. See Below.`); throw err; } - }); + } // The code above is expected to throw and terminate the further execution, // so we can just do this. - modInfos.push(...missingModInfos); + modInfos.push(...(await Promise.all(missingModInfos))); } } @@ -277,14 +298,17 @@ export async function fetchProjectsBulk(toFetch: number[]): Promise { +export async function fetchMods( + toFetch: ModpackManifestFile[], + destination: string, +): Promise { if (toFetch.length > 0) { - log(`Fetching ${toFetch.length} mods...`); + logInfo(`Fetching ${toFetch.length} mods...`); let fetched = 0; - return Bluebird.map( - toFetch, - async (file) => { + + await Promise.all( + toFetch.map(async (file): Promise => { const fileInfo = await fetchFileInfo(file.projectID, file.fileID); const fileDef: FileDef = { url: fileInfo.downloadUrl, @@ -302,18 +326,21 @@ export async function fetchMods(toFetch: ModpackManifestFile[], destination: str fetched += 1; if (modFile.reason == RetrievedFileDefReason.Downloaded) { - log(`Downloaded ${upath.basename(fileDef.url)}... (${fetched} / ${toFetch.length})`); + logInfo( + `Downloaded ${upath.basename(fileDef.url)}... (${fetched} / ${toFetch.length})`, + ); } else if (modFile.reason == RetrievedFileDefReason.CacheHit) { - log(`Fetched ${upath.basename(fileDef.url)} from cache... (${fetched} / ${toFetch.length})`); + logInfo( + `Fetched ${upath.basename(fileDef.url)} from cache... (${fetched} / ${toFetch.length})`, + ); } const dest = upath.join(destination, fileInfo.fileName); - await fs.promises.symlink(relative(dest, modFile.cachePath), dest); - }, - { concurrency: buildConfig.downloaderConcurrency }, + await fs.promises.symlink(upath.resolve(modFile.cachePath), dest); + }), ); } else { - log("No mods to fetch."); + logInfo("No mods to fetch."); } } diff --git a/tools/util/hashes.ts b/tools/utils/hashes.ts similarity index 78% rename from tools/util/hashes.ts rename to tools/utils/hashes.ts index b2428ff..74b3d80 100644 --- a/tools/util/hashes.ts +++ b/tools/utils/hashes.ts @@ -1,7 +1,7 @@ import _sha1 from "sha1"; import _md5 from "md5"; -import { HashDef } from "../types/hashDef"; +import { HashDef } from "#types/hashDef.ts"; /** * Returns the hash sum of bytes of given bytes using SHA1. @@ -34,11 +34,17 @@ const hashFuncs: { [key: string]: (buffer: Buffer) => string } = { * * @throws {Error} Throws a generic error if hashes don't match. */ -export const compareBufferToHashDef = (buffer: Buffer, hashDef: HashDef): boolean => { +export const compareBufferToHashDef = ( + buffer: Buffer, + hashDef: HashDef, +): boolean => { if (!hashFuncs[hashDef.id]) { throw new Error(`No hash function found for ${hashDef.id}.`); } const sum = hashFuncs[hashDef.id](buffer); - return (Array.isArray(hashDef.hashes) && hashDef.hashes.includes(sum)) || hashDef.hashes == sum; + return ( + (Array.isArray(hashDef.hashes) && hashDef.hashes.includes(sum)) || + hashDef.hashes == sum + ); }; diff --git a/tools/utils/log.ts b/tools/utils/log.ts new file mode 100644 index 0000000..d621eea --- /dev/null +++ b/tools/utils/log.ts @@ -0,0 +1,18 @@ +import logger from "fancy-log"; +import colors from "colors"; + +export function logNotImportant(message: string): void { + logger.info(colors.dim(message)); +} + +export default function logInfo(message: string): void { + logger.info(message); +} + +export function logWarn(message: string): void { + logger.warn(colors.yellow(message)); +} + +export function logError(message: string): void { + logger.error(colors.red(colors.bold(message))); +} diff --git a/tools/utils/util.ts b/tools/utils/util.ts new file mode 100644 index 0000000..9de5815 --- /dev/null +++ b/tools/utils/util.ts @@ -0,0 +1,756 @@ +import sha1 from "sha1"; +import { FileDef } from "#types/fileDef.ts"; +import fs from "fs"; +import buildConfig from "#buildConfig"; +import upath from "upath"; +import { compareBufferToHashDef } from "./hashes.ts"; +import { execSync } from "child_process"; +import { + ExternalDependency, + ModpackManifest, + ModpackManifestFile, +} from "#types/modpackManifest.ts"; +import { + fetchFileInfo, + fetchProject, + fetchProjectsBulk, +} from "./curseForgeAPI.ts"; +import { VersionManifest } from "#types/versionManifest.ts"; +import { VersionsManifest } from "#types/versionsManifest.ts"; +import { pathspec, SimpleGit, simpleGit } from "simple-git"; +import { Commit, ModChangeInfo } from "#types/changelogTypes.ts"; +import { modpackManifest, repoName, repoOwner, rootDirectory } from "#globals"; +import { Octokit } from "@octokit/rest"; +import logInfo, { logError, logWarn } from "./log.ts"; +import lodash from "lodash"; +import axios, { + AxiosError, + AxiosInstance, + AxiosRequestConfig, + AxiosResponse, + AxiosStatic, +} from "axios"; +import axiosRetry, { + DEFAULT_OPTIONS, + IAxiosRetryConfig, + IAxiosRetryConfigExtended, + namespace, +} from "axios-retry"; +import stream from "node:stream"; +import { NomiConfig } from "#types/axios.ts"; + +const LIBRARY_REG = /^(.+?):(.+?):(.+?)$/; + +// Make git commands run in root dir +const git: SimpleGit = simpleGit(rootDirectory); + +const retryCfg: IAxiosRetryConfig = { + retries: 10, + retryDelay: (count) => count * 100, + onRetry: (count, error, cfg) => + logWarn( + `Retrying HTTP Request of URL ${cfg.url} in 100ms. (${error.message}) (${count} Times)`, + ), + onMaxRetryTimesExceeded: (error) => { + throw error; + }, +}; + +axiosRetry(axios, retryCfg); + +const fileDownloader = axios.create(); +axiosRetry(fileDownloader, retryCfg); +fileDownloader.interceptors.response.use(async (response) => { + if (response.status < 200 || response.status > 299) return response; // Error, Probably Handled by Axios Retry + if (!response.data || !(response.data instanceof stream.Stream)) + return retryOrThrow(response, "No Response Error"); + + const buf: Uint8Array[] = []; + const dataStream = response.data as stream.Stream; + const buffer = await new Promise((resolve) => { + dataStream.on("data", (chunk) => buf.push(chunk)); + dataStream.on("end", () => { + resolve(Buffer.concat(buf)); + }); + }); + + const nomiCfg = response.config.nomiCfg as Required; + const url = response.config.url ?? nomiCfg.fileDef.url; + + // If Buffer Does not Match, Retry + if (!buffer) + throw new Error(`Failed to Download File from ${url}, no Buffer Returned!`); + if (nomiCfg.fileDef.hashes) { + const success = nomiCfg.fileDef.hashes.every((hashDef) => { + return compareBufferToHashDef(buffer, hashDef); + }); + if (!success) + return retryOrThrow( + response, + `Failed to Download File from ${url}, File Checksum Checking Failed!`, + ); + } + + response.data = buffer; + return response; +}, null); + +export function getAxios(): AxiosStatic { + return axios; +} + +/** + * Parses the library name into path following the standard package naming convention. + * + * Turns `package:name:version` into `package/name/version/name-version`. + */ +export const libraryToPath = (library: string): string => { + const parsedLibrary = LIBRARY_REG.exec(library); + if (parsedLibrary) { + const pkg = parsedLibrary[1].replace(/\./g, "/"); + const name = parsedLibrary[2]; + const version = parsedLibrary[3]; + + return `${pkg}/${name}/${version}/${name}-${version}`; + } + return ""; +}; + +/** + * Checks if given environmental variables are set. Throws otherwise. + */ +export const checkEnvironmentalVariables = (vars: string[]): void => { + vars.forEach((vari) => { + if (!isEnvVariableSet(vari)) { + throw new Error(`Environmental variable ${vari} is unset.`); + } + }); +}; + +/** + * Returns true if given variable set, false otherwise. + */ +export const isEnvVariableSet = (env: string): boolean => { + return Boolean(process.env[env]) && process.env[env] != ""; +}; + +/** + * Check if given git tag exists. Throws otherwise. + */ +export const checkGitTag = (tag: string): void => { + // The below command returns an empty buffer if the given tag does not exist. + const tagBuffer = execSync(`git tag --list ${tag}`); + + if (!tagBuffer || tagBuffer.toString().trim() != tag) { + throw new Error(`Tag ${tag} could not be found.`); + } +}; + +export enum RetrievedFileDefReason { + Downloaded, + CacheHit, +} + +export interface RetrievedFileDef { + reason: RetrievedFileDefReason; + cachePath: string; +} + +/** + * Downloads/fetches files from the Interwebs. + * + * Internally hashes the URL of the provided FileDef and looks it up in the cache directory. + * In case of no cache hit, downloads the file and stores within the cache directory for later use. + *

+ * @param fileDef The file def to download or retrieve. + */ +export async function downloadOrRetrieveFileDef( + fileDef: FileDef, +): Promise { + const fileNameSha = sha1(fileDef.url); + + const cachedFilePath = upath.join( + buildConfig.downloaderCacheDirectory, + fileNameSha, + ); + if (fs.existsSync(cachedFilePath)) { + const file = await fs.promises.readFile(cachedFilePath); + + if (file.length !== 0) { + const rFileDef = { + reason: RetrievedFileDefReason.CacheHit, + cachePath: cachedFilePath, + }; + + // Check hashes. + if (fileDef.hashes) { + if ( + fileDef.hashes.every((hashDef) => { + return compareBufferToHashDef(file, hashDef); + }) + ) { + return rFileDef; + } + } else { + return rFileDef; + } + } + } + + if (!fs.existsSync(buildConfig.downloaderCacheDirectory)) { + await fs.promises.mkdir(buildConfig.downloaderCacheDirectory, { + recursive: true, + }); + } + + let handle: fs.promises.FileHandle | undefined = undefined; + try { + handle = await fs.promises.open(cachedFilePath, "w"); + + await handle.write(await downloadFileDef(fileDef)); + await handle.close(); + + return { + reason: RetrievedFileDefReason.Downloaded, + cachePath: cachedFilePath, + }; + } catch (err) { + // noinspection PointlessBooleanExpressionJS,JSObjectNullOrUndefined + if (handle && (await handle.stat()).isFile()) { + logInfo( + `Couldn't download ${upath.basename(fileDef.url)}, cleaning up ${fileNameSha}...`, + ); + + await handle.close(); + await fs.promises.unlink(cachedFilePath); + } + + throw err; + } +} + +/** + * Similar to downloadOrRetrieveFileDef, but does not check cache. + */ +export async function downloadFileDef(fileDef: FileDef): Promise { + const response = await fileDownloader({ + method: "get", + responseType: "stream", + url: fileDef.url, + nomiCfg: { + fileDef: fileDef, + }, + }); + + return response.data as Buffer; +} + +function fixConfig( + axiosInstance: AxiosInstance | AxiosStatic, + config: AxiosRequestConfig, +) { + // @ts-expect-error agent non-existent in type declaration` + if (axiosInstance.defaults.agent === config.agent) { + // @ts-expect-error agent non-existent in type declaration + delete config.agent; + } + if (axiosInstance.defaults.httpAgent === config.httpAgent) { + delete config.httpAgent; + } + if (axiosInstance.defaults.httpsAgent === config.httpsAgent) { + delete config.httpsAgent; + } +} + +/** + * Use Axios Retry API to retry if Hash Failed or No Response. + */ +function retryOrThrow( + response: AxiosResponse, + error: string, +) { + const currentState = { + ...DEFAULT_OPTIONS, + ...retryCfg, + ...response.config[namespace], + }; + const config = { ...response.config }; + + currentState.retryCount = currentState.retryCount || 0; + currentState.lastRequestTime = currentState.lastRequestTime || Date.now(); + config[namespace] = currentState; + + const axiosError = new AxiosError(); + + const retryState = currentState as Required; + if (retryState.retryCount < retryState.retries) { + retryState.retryCount++; + const delay = retryState.retryDelay(retryState.retryCount, axiosError); + fixConfig(fileDownloader, config); + if ( + !retryState.shouldResetTimeout && + config.timeout && + currentState.lastRequestTime + ) { + const lastRequestDuration = Date.now() - currentState.lastRequestTime; + const timeout = config.timeout - lastRequestDuration - delay; + if (timeout <= 0) throw new Error(error); + config.timeout = timeout; + } + config.transformRequest = [(data) => data]; + axiosError.message = error; + retryState.onRetry(retryState.retryCount, axiosError, config); + + return new Promise>((resolve) => { + setTimeout(() => resolve(fileDownloader(config)), delay); + }); + } + + throw new Error(error); +} + +/** + * Returns artifact name body depending on environment variables. + * Mostly intended to be called by CI/CD. + */ +export function makeArtifactNameBody(baseName: string): string { + // If the tag is provided by CI, simply just glue it to the base name. + if (process.env.GITHUB_TAG) { + return `${baseName}-${process.env.GITHUB_TAG}`; + } + // If Pull Request Branch Name is provided and a 'True SHA' is provided + if (process.env.GITHUB_HEAD_REF && process.env.TRUE_SHA) { + const shortCommit = process.env.TRUE_SHA.substring(0, 7); + return `${baseName}-${process.env.GITHUB_HEAD_REF}-${shortCommit}`; + } + // If SHA and ref is provided, append both the branch and short SHA. + if ( + process.env.GITHUB_SHA && + process.env.GITHUB_REF && + process.env.GITHUB_REF.startsWith("refs/heads/") + ) { + const shortCommit = process.env.GITHUB_SHA.substring(0, 7); + const branch = /refs\/heads\/(.+)/.exec(process.env.GITHUB_REF); + if (branch) return `${baseName}-${branch[1]}-${shortCommit}`; + } + return baseName; +} + +/** + * Returns and fetches the last tag known to Git using the current branch. + * @param before Tag to get the tag before. + * @returns string Git tag. + * @throws + */ +export function getLastGitTag(before?: string): string { + if (before) { + before = `"${before}^"`; + } + + return execSync(`git describe --abbrev=0 --tags ${before || ""}`) + .toString() + .trim(); +} + +/** + * Generates a changelog based on the two provided Git refs. + * @param since Lower boundary Git ref. + * @param to Upper boundary Git ref. + * @param dirs Optional scopes. These are of the perspective of the root dir. + * @returns changelog Object Array of Changelog + */ +export async function getChangelog( + since = "HEAD", + to = "HEAD", + dirs: string[] | undefined = undefined, +): Promise { + const options: string[] = ["--no-merges", `${since}..${to}`]; + if (dirs) { + dirs.forEach((dir) => { + options.push(pathspec(dir)); + }); + } + + const commitList: Commit[] = []; + await git.log(options, (err, output) => { + if (err) { + logError(err.toString()); + throw new Error(); + } + + // Cannot simply set commitList as output.all as is read only, must do this + output.all.forEach((commit) => commitList.push(commit)); + }); + + return commitList; +} + +/** + * Gets the list of tags that are at or before a certain ref point. + * @param ref The ref point. Can be a tag or a commit sha. If not set, defaults to HEAD. + * @returns tags An array of all the tags + */ +export async function getTags(ref = "HEAD"): Promise { + const options: string[] = ["--merged", ref]; + const test = await git.tags(options); + return test.all; +} + +/** + * Gets the file at a certain point in time. + * @param path The path to the file + * @param revision The git ref point. Can also be a commit SHA. + */ +export async function getFileAtRevision( + path: string, + revision = "HEAD", +): Promise { + let output: string = ""; + await git.show(`${revision}:./${path}`, (err, file) => { + if (err) { + logError(err.toString()); + throw new Error(); + } + output = file.trim(); + }); + return output; +} + +export interface ManifestFileListComparisonResult { + removed: ModChangeInfo[]; + modified: ModChangeInfo[]; + added: ModChangeInfo[]; +} + +async function getModName(projectID: number): Promise { + return fetchProject(projectID).then((info) => info.name); +} + +async function getFileName(projectID: number, fileID: number): Promise { + return fetchFileInfo(projectID, fileID).then((info) => info.displayName); +} + +export async function compareAndExpandManifestDependencies( + oldFiles: ModpackManifest, + newFiles: ModpackManifest, +): Promise { + // Map inputs for efficient joining. + const oldFileMap: { [key: number]: ModpackManifestFile } = + oldFiles.files.reduce((map: Record, file) => { + map[file.projectID] = file; + return map; + }, {}); + const newFileMap: { [key: number]: ModpackManifestFile } = + newFiles.files.reduce((map: Record, file) => { + map[file.projectID] = file; + return map; + }, {}); + + const removed: ModChangeInfo[] = [], + modified: ModChangeInfo[] = [], + added: ModChangeInfo[] = []; + + // Create a distinct map of project IDs. + const projectIDs = Array.from( + new Set([ + ...oldFiles.files.map((f) => f.projectID), + ...newFiles.files.map((f) => f.projectID), + ]), + ); + + // Fetch projects in bulk and discard the result. + // Future calls to fetchProject() and fetchProjectsBulk() will hit the cache. + await fetchProjectsBulk(projectIDs); + + const toFetch: Promise[] = []; + for (const projectID of projectIDs) { + const oldFileInfo = oldFileMap[projectID]; + const newFileInfo = newFileMap[projectID]; + + // Doesn't exist in new, but exists in old. Removed. Left outer join. + if (!newFileInfo && oldFileInfo) { + const names = Promise.all([ + getModName(projectID), + getFileName(projectID, oldFileInfo.fileID), + ]); + toFetch.push( + names.then(([mod, file]) => { + removed.push({ + modName: mod, + projectID: projectID, + oldVersion: file, + }); + }), + ); + } + // Doesn't exist in old, but exists in new. Added. Right outer join. + else if (newFileInfo && !oldFileInfo) { + const names = Promise.all([ + getModName(projectID), + getFileName(projectID, newFileInfo.fileID), + ]); + toFetch.push( + names.then(([mod, file]) => { + added.push({ + modName: mod, + projectID: projectID, + newVersion: file, + }); + }), + ); + } + // Exists in both. Modified? Inner join. + else if (oldFileInfo.fileID != newFileInfo.fileID) { + const names = Promise.all([ + getModName(projectID), + getFileName(projectID, oldFileInfo.fileID), + getFileName(projectID, newFileInfo.fileID), + ]); + toFetch.push( + names.then(([mod, oldFile, newFile]) => { + modified.push({ + modName: mod, + projectID: projectID, + oldVersion: oldFile, + newVersion: newFile, + }); + }), + ); + } + } + // Fetch All Modifications Async + await Promise.all(toFetch); + + // Compare external dependencies the same way. + const oldExternalMap: { [key: string]: ExternalDependency } = ( + oldFiles.externalDependencies || [] + ).reduce((map: Record, file) => { + map[file.name] = file; + return map; + }, {}); + const newExternalMap: { [key: string]: ExternalDependency } = ( + newFiles.externalDependencies || [] + ).reduce((map: Record, file) => { + map[file.name] = file; + return map; + }, {}); + + const externalNames = Array.from( + new Set([ + ...(oldFiles.externalDependencies || []).map((dep) => dep.name), + ...(newFiles.externalDependencies || []).map((dep) => dep.name), + ]), + ); + + externalNames.forEach((name) => { + const oldDep = oldExternalMap[name]; + const newDep = newExternalMap[name]; + + // Doesn't exist in new, but exists in old. Removed. Left outer join. + if (!newDep && oldDep) { + removed.push({ modName: oldDep.name }); + } + // Doesn't exist in old, but exists in new. Added. Right outer join. + else if (newDep && !oldDep) { + added.push({ modName: newDep.name }); + } + // Exists in both. Modified? Inner join. + else if (oldDep.url != newDep.url || oldDep.name != newDep.name) { + modified.push({ modName: newDep.name }); + } + }); + + return { + removed: removed, + modified: modified, + added: added, + }; +} + +const LAUNCHERMETA_VERSION_MANIFEST = + "https://launchermeta.mojang.com/mc/game/version_manifest.json"; + +/** + * Fetches the version manifest associated with the provided Minecraft version. + * + * @param minecraftVersion Minecraft version. (e. g., "1.12.2") + */ +export async function getVersionManifest( + minecraftVersion: string, +): Promise { + /** + * Fetch the manifest file of all Minecraft versions. + */ + const manifest: VersionsManifest = ( + await axios({ + url: LAUNCHERMETA_VERSION_MANIFEST, + method: "get", + responseType: "json", + }) + )?.data; + + if (!manifest) return undefined; + + const version = manifest.versions.find((x) => x.id == minecraftVersion); + if (!version) { + return; + } + + return ( + await axios({ + url: version.url, + method: "get", + responseType: "json", + }) + )?.data; +} + +/** + * Cleans up a file's display name, and returns the version. Works for all tested mods! + * @param version The filename/version to cleanup. + */ +export function cleanupVersion(version?: string): string { + if (!version) return ""; + version = version.replace(/1\.12\.2|1\.12|\.jar/g, ""); + const list = version.match(/[\d+.?]+/g); + if (!list) return version; + return list[list.length - 1]; +} + +const issueURLCache: Map = new Map(); + +/** + * Gets newest updated 100 closed issue/PR URLs of the repo and saves it to the cache. + */ +export async function getNewestIssueURLs(octokit: Octokit): Promise { + if (issueURLCache.size > 0) return; + try { + const issues = await octokit.issues.listForRepo({ + owner: repoOwner, + repo: repoName, + per_page: 100, + state: "closed", + sort: "updated", + }); + if (issues.status !== 200) { + logError( + `Failed to get all Issue URLs of Repo. Returned Status Code ${issues.status}, expected Status 200.`, + ); + return; + } + issues.data.forEach((issue) => { + if (!issueURLCache.has(issue.number)) + issueURLCache.set(issue.number, issue.html_url); + }); + } catch (e) { + logError( + "Failed to get all Issue URLs of Repo. This may be because there are no issues, or because of rate limits.", + ); + } +} + +/** + * Gets the specified Issue URL from the cache, or retrieves it. + */ +export async function getIssueURL( + issueNumber: number, + octokit: Octokit, +): Promise { + if (issueURLCache.has(issueNumber)) + return issueURLCache.get(issueNumber) ?? ""; + try { + const issueInfo = await octokit.issues.get({ + owner: repoOwner, + repo: repoName, + issue_number: issueNumber, + }); + if (issueInfo.status !== 200) { + logError( + `Failed to get the Issue/PR Info for Issue/PR #${issueNumber}. Returned Status Code ${issueInfo.status}, expected Status 200.`, + ); + return ""; + } + logInfo( + `No Issue URL Cache for Issue Number ${issueNumber}. Retrieved Specifically.`, + ); + return issueInfo.data.html_url; + } catch (e) { + logError( + `Failed to get the Issue/PR Info for Issue/PR #${issueNumber}. This may be because this is not a PR or Issue, or could be because of rate limits.`, + ); + return ""; + } +} + +export const FORGE_VERSION_REG = /forge-(.+)/; +export const FORGE_MAVEN = "https://files.minecraftforge.net/maven/"; + +export async function getForgeJar(): Promise<{ + forgeJar: Buffer; + forgeInstallerPath: string; + forgeUniversalPath: string; +}> { + const minecraft = modpackManifest.minecraft; + + /** + * Break down the Forge version defined in manifest.json. + */ + const parsedForgeEntry = FORGE_VERSION_REG.exec( + ( + minecraft.modLoaders.find((x) => x.id && x.id.indexOf("forge") != -1) || + {} + ).id || "", + ); + + if (!parsedForgeEntry) { + throw new Error("Malformed Forge version in manifest.json."); + } + + /** + * Transform Forge version into Maven library path. + */ + const forgeMavenLibrary = `net.minecraftforge:forge:${minecraft.version}-${parsedForgeEntry[1]}`; + const forgeInstallerPath = + libraryToPath(forgeMavenLibrary) + "-installer.jar"; + const forgeUniversalPath = upath.join( + "maven", + libraryToPath(forgeMavenLibrary) + ".jar", + ); + + /** + * Fetch the Forge installer + */ + const forgeJar = await fs.promises.readFile( + ( + await downloadOrRetrieveFileDef({ + url: FORGE_MAVEN + forgeInstallerPath, + }) + ).cachePath, + ); + + return { forgeJar, forgeInstallerPath, forgeUniversalPath }; +} + +export interface ArrayUnique { + arr1Unique: T[]; + arr2Unique: T[]; +} + +/** + * Returns the values unique to each array, via lodash. + */ +export function getUniqueToArray( + arr1: T[], + arr2: T[], + mappingFunc?: (val: T) => unknown, +): ArrayUnique { + if (mappingFunc) + return { + arr1Unique: lodash.differenceBy(arr1, arr2, mappingFunc), + arr2Unique: lodash.differenceBy(arr2, arr1, mappingFunc), + }; + return { + arr1Unique: lodash.difference(arr1, arr2), + arr2Unique: lodash.difference(arr2, arr1), + }; +}